Wywołaj funkcję Javascript z adresu URL / paska adresu


112

Czy można wywołać funkcję javascript z adresu URL? Zasadniczo próbuję wykorzystać metody JS na stronie, na której nie mam dostępu do źródła.

Coś jak: http://www.example.com/mypage.aspx?javascript:printHelloWorld()

Wiem, że jeśli umieścisz javascript:alert("Hello World");w pasku adresu, to zadziała.

Podejrzewam, że odpowiedź na to pytanie brzmi: nie, ale po prostu zastanawiałem się, czy istnieje sposób, aby to zrobić.


3
Jakie zachowanie musiałby wyświetlać Twój adres URL - czy chcesz uruchomić JavaScript w kontekście tej witryny?
Pekka,

Na http:początku identyfikatora URI mówi przeglądarce „Chcę, abyś wysłał żądanie HTTP”, więc robi to żądanie HTTP. Myślę, że nie da się tego obejść.
Constantin

7
Jeśli wkleię javascript:alert("Hi");w pasku adresu przeglądarki Firefox (28.0) i naciśnę Enter, nic się nie dzieje. Może to zostało wyłączone? ... Tak, najwyraźniej zostało wyłączone, ponieważ idiotów można było przekonać do wklejenia czegokolwiek w pasku adresu. Informacje znalazłem tutaj: stackoverflow.com/a/18782801/111036
mivk

1
Kopiuj wklej nie działa, ale jeśli go wpiszesz, działa, wygląda na to, że nie jest wyłączone, ale jest analizowane podczas wklejania.
Bhabani Sankar Mishra

1
Uwaga: działa w przeglądarce Firefox tylko wtedy, gdy 1. jesteś na rzeczywistej (nie pustej) stronie i 2. wyraźnie wstawiłeś przed nią „javascript:”.
Andrew,

Odpowiedzi:


59

Nie ma hiperłącza, nie. Nie, chyba że strona zawiera skrypt specjalnie do tego celu i sprawdza jakiś parametr ... ale jeśli chodzi o twoje pytanie, nie, nie ma wbudowanej obsługi w przeglądarkach.

Istnieją jednak bookmarklety, które możesz dodać do zakładek, aby szybko uruchamiać funkcje JavaScript z paska adresu; Nie jestem pewien, czy to spełnia Twoje potrzeby, ale jest tak blisko, jak to tylko możliwe.


5
Zasadniczo próbuję wykorzystać metody JS na stronie, na której nie mam dostępu do źródła.
DazManCat

27

Pisz w pasku adresu

javascript:alert("hi");

Upewnij się, że piszesz na początku: javascript:


1
Nie działa w przeglądarce Google Chrome w wersji 80.0.3987.132 (oficjalna kompilacja) (64-bitowa). Chrome automatycznie usuwa javascript:prefiks z paska adresu.
stomia

2
@stomy Niestety trzeba wpisać javascript:ręcznie
wjandrea

24

Możesz użyć identyfikatorów URI danych. Na przykład: data:text/html,<script>alert('hi');</script>

Więcej informacji można znaleźć na stronie : https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs


1
Zawsze myślałem, że adres URL danych jest tylko dla obrazów, dzięki, to jest naprawdę niesamowite :)
Fareed Alnamrouti

2
nie możesz dołączyć tego do adresu URL.
nice_dev,

Niektóre przeglądarki mogą to blokować komunikatem:Navigation to toplevel data: URI not allowed (Blocked loading of: “data:text/html,<script>alert('hi');</script>”)
Aleksandr Ryabov

Działa w przeglądarce Google Chrome w wersji 80.0.3987.132 (oficjalna kompilacja) (64-bitowa).
stomia

działa Chrome 80.0.3987.162 (Official Build) (64-bit)Firefox 72.0.2 (64 bit)
wi

6

/test.html#alert('heello ')

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

13
Należy zauważyć, że ocena danych wejściowych użytkownika jest bardzo niebezpieczną praktyką i zwykle nie powinna być dozwolona.
domenukk

6
Tak, to jest całkiem szalone. Są miejsca pracy, w których zostałbyś zwolniony z powodu tego rodzaju szaleństwa.
Jacob

6
Prowadzi to do odzwierciedlonych problemów z cross-site scripting (XSS), jak wskazał @domenukk.
pavanw3b

6

możesz również umieścić następujące

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

do kodu html, a po kliknięciu hiperłącza „Kliknij mnie” na pasku adresu URL pojawi się skrypt javascript i pojawi się okno dialogowe Alert


5
w jakiej przeglądarce na pasku adresu URL pojawi się javascript ? Nigdy tego nie widziałem. (Wiem, javascript: linki działają, mówię tylko o pasku adresu URL)
Sean Patrick Floyd

Ani ja. Wiem, że możesz wpisać JS w pasku adresu
DazManCat

To jest to, czego szukałem, jak to się nazywa?
ThorSummoner,

4

Informacje o window.location.hashwłaściwości:

Zwróć zakotwiczoną część adresu URL.


Przykład 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"

Przykład 2:

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

Przykład 3:

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

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

case "#admin":  

}

3

Korzystanie z odpowiedzi Eddy'ego zadziałało bardzo dobrze, ponieważ miałem podobny problem. Po prostu wywołaj swój adres URL z parametrami: „www.mypage.html # myAnchor”

Następnie w mypage.html:

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

2

możesz użyć takiej sytuacji: na przykład masz stronę: http://www.example.com/page.php następnie w tym page.php wstaw ten kod:

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

następnie za każdym razem, gdy odwiedzasz ten adres URL: http://www.example.com/page.php?doaction=blabla

wtedy alert zostanie wywołany automatycznie.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.