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

112

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

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

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

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

DazManCat
источник
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:

hfarazm
источник
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.

yassine45
источник
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
  }
});
EllemKah
источник
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

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

T.Todua
источник