Вызов функции Javascript из URL / адресной строки


112

Можно ли вызвать функцию javascript из URL-адреса? Я в основном пытаюсь использовать методы JS на странице, у которой нет доступа к источнику.

Что-то вроде: http://www.example.com/mypage.aspx?javascript:printHelloWorld()

Я знаю, что если вы введете javascript:alert("Hello World");в адресную строку, это сработает.

Я подозреваю, что ответ на этот вопрос отрицательный, просто подумал, есть ли способ сделать это.


3
Какое поведение должен отображать ваш URL - хотите ли вы выполнить Javascript в контексте этого сайта?
Pekka

Знак http:в начале URI сообщает браузеру: «Я хочу, чтобы вы сделали HTTP-запрос», поэтому HTTP-запрос делает. Думаю, выхода нет.
Константин

7
Если я вставлю javascript:alert("Hi");в адресную строку Firefox (28.0) и нажму Enter, ничего не произойдет. Может, это отключили? ... Да, очевидно, он был отключен, потому что идиотов можно было убедить вставить что-нибудь в свою адресную строку. Нашел информацию здесь: stackoverflow.com/a/18782801/111036
mivk

1
копипаст не работает, но если вы его наберете, он работает, похоже, что он не отключен, но анализируется при вставке.
Бхабани Санкар Мишра

1
Примечание: это работает только в Firefox, когда 1. вы находитесь на реальной (не пустой) странице и 2. вы явно помещаете перед ней «javascript:».
Эндрю

Ответы:


59

Нет, нет гиперссылки. Нет, если на странице есть скрипт внутри специально для этого, и он проверяет какой-то параметр ... но на ваш вопрос, нет, в браузерах нет встроенной поддержки для этого.

Однако есть букмарклеты, которые можно добавлять в закладки, чтобы быстро запускать функции JavaScript из адресной строки; не уверен, что это соответствует вашим потребностям, но это так близко, насколько это возможно.


5
Я в основном пытаюсь использовать методы JS на странице, у которой нет доступа к источнику.
DazManCat

27

Напишите в адресной строке

javascript:alert("hi");

Убедитесь, что вы написали в начале: javascript:


1
Он не работает в Google Chrome версии 80.0.3987.132 (официальная сборка) (64-разрядная версия). Chrome автоматически удаляет javascript:префикс из адресной строки.
stomy

2
@stomy К сожалению, вам нужно вводить javascript:вручную
wjandrea

24

Вы можете использовать URI данных. Например: data:text/html,<script>alert('hi');</script>

Для получения дополнительной информации посетите: https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs.


1
Я всегда думал, что URL-адрес данных предназначен только для изображений, спасибо, это действительно потрясающе :)
Фарид Алнамрути,

2
вы не можете добавить это к URL-адресу.
nice_dev

Некоторые браузеры могут блокировать это с помощью сообщения:Navigation to toplevel data: URI not allowed (Blocked loading of: “data:text/html,<script>alert('hi');</script>”)
Александр Рябов

Он работает в Google Chrome версии 80.0.3987.132 (официальная сборка) (64-разрядная версия).
stomy

он работает внутри Chrome 80.0.3987.162 (Official Build) (64-bit)и внутриFirefox 72.0.2 (64 bit)
Alex Pandrea

6

/test.html#alert('heello ')

test.html
<button onClick="eval(document.location.hash.substring(1))">do it</button>

13
Обратите внимание, что такая оценка пользовательского ввода является очень опасной практикой и обычно не допускается.
domenukk

6
Да, это безумие. Есть рабочие места, где вас могут уволить из-за такого безумия.
Джейкоб

6
Это приводит к проблемам с отраженным межсайтовым скриптингом (XSS), на что указывает @domenukk.
pavanw3b

6

вы также можете разместить следующие

<a href='javascript:alert("hello world!");'>Click me</a>

к вашему html-коду, и когда вы нажмете гиперссылку 'Click me', javascript появится в url-bar и появится диалоговое окно Alert


5
javascript появится в url-баре в каком браузере? Я такого никогда не видел. (Я знаю, что javascript: ссылки работают, я просто говорю об адресной строке)
Шон Патрик Флойд,

Я тоже. Я знаю, что вы можете ввести JS в адресную строку
DazManCat

Это то, что я искал, как это называется?
ThorSummoner

4

О window.location.hashсвойстве:

вернуть привязанную часть URL-адреса.


Пример 1:

//Assume that the current URL is 

var URL = "http://www.example.com/test.htm#part2";

var x = window.location.hash;

//The result of x will be:

x = "#part2"

Пример 2:

$(function(){   
    setTimeout(function(){
        var id = document.location.hash;
        $(id).click().blur();
    }, 200);
})

Пример 3:

var hash = "#search" || window.location.hash;
window.location.hash = hash; 

switch(hash){   
case "#search":  
    selectPanel("pnlSearch");
    break;    
case "#advsearch":    

case "#admin":  

}

3

Использование ответа Эдди сработало очень хорошо, так как у меня была такая же проблема. Просто вызовите свой URL с параметрами: "www.mypage.html # myAnchor"

Затем в mypage.html:

$(document).ready(function(){
  var hash = window.location.hash;
  if(hash.length > 0){
    // your action with the hash
  }
});

2

вы можете использовать такую ​​ситуацию: например, у вас есть страница: http://www.example.com/page.php затем в этот page.php вставьте этот код:

if (!empty($_GET['doaction']) && $_GET['doaction'] == blabla ){
echo '<script>alert("hello");</script>';
}

затем, когда вы посещаете этот URL: http://www.example.com/page.php?doaction=blabla

тогда оповещение будет вызвано автоматически.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.