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.


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.


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:


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


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>

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


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

}

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
  }
});

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.