Виклик функції 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
копіювальна паста не працює, але якщо ви введете її, вона працює, схоже, вона не відключена, але розбита при вставці.
Bhabani Sankar Mishra

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:префікс із адресного рядка.
стом

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-адреса призначена лише для зображень, дякую, це справді дивовижно :)
Fareed Alnamrouti

2
ви не можете додати це до URL-адреси.
vivek_23

Деякі браузери можуть заблокувати це повідомленням:Navigation to toplevel data: URI not allowed (Blocked loading of: “data:text/html,<script>alert('hi');</script>”)
Олександр Рябов

Він працює в Google Chrome версії 80.0.3987.132 (Офіційна збірка) (64-розрядна).
стоми

працює в Chrome 80.0.3987.162 (Official Build) (64-bit)і вFirefox 72.0.2 (64 bit)
Алекс Пандреа

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-коду, а при натисканні на гіперпосилання "Клацніть на мене", на панелі URL-адрес з’явиться javascript, і з'явиться діалогове вікно сповіщення


5
javascript буде відображатися на панелі url у якому браузері? Я ніколи цього не бачив. (Я знаю, що JavaScript: посилання працюють, я просто говорю про рядок URL)
Шон Патрік Флойд

Я також не знаю. Я знаю, що ви можете ввести 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.