Appeler la fonction Javascript depuis l'URL / la barre d'adresse

112

Est-il possible d'appeler une fonction javascript à partir de l'URL? J'essaie essentiellement d'exploiter les méthodes JS dans une page où je n'ai pas accès à la source.

Quelque chose comme: http://www.example.com/mypage.aspx?javascript:printHelloWorld()

Je sais que si vous mettez javascript:alert("Hello World");dans la barre d'adresse, cela fonctionnera.

Je soupçonne que la réponse à cette question est non mais je me suis simplement demandé s'il y avait un moyen de le faire.

DazManCat
la source
3
Quel comportement votre URL devrait-elle afficher - voulez-vous exécuter Javascript dans le contexte de ce site?
Pekka
Le http:au début de l'URI indique au navigateur "Je veux que vous fassiez une requête HTTP", donc la requête HTTP le fait. Il n'y a pas moyen de contourner cela, je pense.
Constantin
7
Si je colle javascript:alert("Hi");dans ma barre d'adresse Firefox (28.0) et appuie sur Entrée, rien ne se passe. Peut-être que cela a été désactivé? ... Oui, apparemment, il a été désactivé car les idiots pourraient être convaincus de coller n'importe quoi dans leur barre d'adresse. Retrouvez les informations ici: stackoverflow.com/a/18782801/111036
mivk
1
le copier-coller ne fonctionne pas, mais si vous le tapez, cela fonctionne, il semble qu'il ne soit pas désactivé, mais analysé une fois collé.
Bhabani Sankar Mishra
1
Remarque: cela ne fonctionne dans Firefox que lorsque 1. vous êtes sur une page réelle (non vide) et 2. que vous mettez explicitement "javascript:" avant.
Andrew

Réponses:

59

Il n'y a pas de lien hypertexte, non. Sauf si la page contient un script spécifiquement pour cela et qu'elle vérifie certains paramètres ... mais pour votre question, non, il n'y a pas de support intégré dans les navigateurs pour cela.

Il existe cependant des bookmarklets que vous pouvez ajouter pour exécuter rapidement des fonctions JavaScript à partir de votre barre d'adresse; Je ne sais pas si cela répond à vos besoins, mais c'est aussi proche que possible.

Nick Craver
la source
5
J'essaie essentiellement de tirer parti des méthodes JS dans une page dont je n'ai pas accès à la source.
DazManCat
27

Ecrire dans la barre d'adresse

javascript:alert("hi");

Assurez-vous d'écrire au début: javascript:

hfarazm
la source
1
Cela ne fonctionne pas sur Google Chrome Version 80.0.3987.132 (version officielle) (64 bits). Chrome supprime automatiquement le javascript:préfixe de la barre d'adresse.
stomie
2
@stomy Vous devez taper javascript:manuellement, malheureusement
wjandrea
24

Vous pouvez utiliser des URI de données. Par exemple: data:text/html,<script>alert('hi');</script>

Pour plus d'informations, visitez: https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs

yassine45
la source
1
J'ai toujours pensé que l'URL des données n'était que pour les images, merci c'est vraiment incroyable :)
Tarif Alnamrouti
2
vous ne pouvez pas ajouter ceci à une URL.
nice_dev
Certains navigateurs peuvent bloquer cela avec un message:Navigation to toplevel data: URI not allowed (Blocked loading of: “data:text/html,<script>alert('hi');</script>”)
Aleksandr Ryabov
Il fonctionne sur Google Chrome Version 80.0.3987.132 (version officielle) (64 bits).
stomie
ça marche dans Chrome 80.0.3987.162 (Official Build) (64-bit)et dansFirefox 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>
Budia
la source
13
Notez que cette évaluation de l'entrée utilisateur est une pratique très dangereuse et ne devrait généralement pas être autorisée.
domenukk
6
Oui, c'est assez insensé. Il y a des lieux de travail où vous seriez viré à cause de ce type de folie.
Jacob
6
Cela conduit à des problèmes de script intersite (XSS) reflétés, comme indiqué par @domenukk.
pavanw3b
6

vous pouvez également placer le suivant

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

à votre code html, et lorsque vous cliquez sur le lien hypertexte «Cliquez sur moi», javascript apparaîtra dans la barre d'url et la boîte de dialogue d'alerte s'affichera

heximal
la source
5
javascript apparaîtra dans la barre d'url dans quel navigateur? Je n'ai jamais vu ça. (Je sais que javascript: les liens fonctionnent, je parle simplement de la barre d'URL)
Sean Patrick Floyd
Moi non plus. Je sais que vous pouvez taper JS dans la barre d'adresse
DazManCat
C'est ce que je cherchais, comment ça s'appelle?
ThorSummoner
4

À propos de la window.location.hashpropriété:

renvoie la partie d'ancrage d'une URL.


Exemple 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"

Exemple 2:

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

Exemple 3:

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

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

case "#admin":  

}
Tourbillon
la source
3

Utiliser la réponse d'Eddy a très bien fonctionné car j'avais un peu le même problème. Appelez simplement votre URL avec les paramètres: "www.mypage.html # myAnchor"

Ensuite, dans mypage.html:

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

vous pouvez utiliser comme cette situation: par exemple, vous avez une page: http://www.example.com/page.php puis dans cette page.php, insérez ce code:

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

puis, chaque fois que vous visitez cette URL: http://www.example.com/page.php?doaction=blabla

alors l'alerte sera automatiquement appelée.

T.Todua
la source