21 votes

Javascript bookmarklet aller à l'URL et exécuter

J'ai un javascript comme celui-ci, utilisé dans un bookmarklet :

window.location="URL"
document.getElementById('username-id').value = 'User'
document.getElementById('pwd-id').value = 'pass'
doLogin();

Le problème est que le javascript s'arrête dès qu'il atteint l'URL. Comment faire pour qu'il aille sur une page et exécute un script ?

Toute aide serait grandement appréciée.

18voto

Rich Points 238

Je ne recommande pas les extensions de navigateur - elles permettent à un code non fiable de s'exécuter dans le contexte d'un code fiable. Si vous disposez d'une extension de navigateur qui charge une page et saisit automatiquement votre identifiant et votre mot de passe, qu'est-ce qui l'empêche d'envoyer ces informations d'identification à un site malveillant ? Vous seul, et seulement si vous avez lu attentivement le code source.

Pour résoudre le problème ci-dessus, j'ai ajouté des bookmarklets à la liste des favoris. 1. Cliquez pour naviguer vers l'emplacement 2. Cliquer pour remplir le formulaire

javascript: 
 var L='http://mysite.com/';
 if(location!=L)location=L;
 else{
  document.getElementById('username-id').value='User'; 
  document.getElementById('pwd-id').value = 'pass';
  document.close();
  doLogin(); 
 }

Bonne chance !

8voto

timdream Points 2930

Malheureusement, votre bookmarklet ne fonctionnera pas. Changement de window.location le résultat du chargement de la nouvelle page - vous ne pouvez pas exécuter de Javascript sur cette page sans que le document soit d'abord présent.

L'action souhaitée peut être réalisée par des extensions de navigateur, par exemple Greasemonkey script, qui exécutent le Javascript spécifié sur la page lors du chargement de celle-ci.

2voto

shesek Points 2726

Si vous contrôlez la page que vous chargez, j'envisagerais de passer ces données en tant que fragment et de les gérer depuis la page. Quelque chose comme window.location="URL#username=...;password=..." que d'analyser les données du fragment dans la page et d'en faire ce dont vous avez besoin. Cependant, dans ce cas précis, ce n'est pas une bonne idée car le mot de passe sera enregistré dans l'historique de navigation.

0voto

Protector one Points 1546

Si vous souhaitez exécuter le bookmarklet à partir d'une page chargée sur le même domaine (et avec le même schéma) que votre emplacement cible, vous pouvez le faire (en quelque sorte) en le chargeant dans un iframe.

javascript:
document.body.innerHTML = '<iframe src="http://example.com/page2.html" onload="this.contentWindow.location.assign(`javascript:
    document.body.style.textTransform = \'uppercase\'; /* put code here */
void(0);`); this.onload = null;" width=100% height=100%>';

Notez l'utilisation de tics arrière pour une chaîne de caractères de plusieurs lignes pour des raisons de lisibilité. Le site onload = null est nécessaire pour éviter une boucle infinie, car onload se déclenchera après l'attribution du code javascript à l'emplacement.

(Testé uniquement dans Chrome.)

-2voto

Daniel Points 7197

Essayez d'envelopper votre code avec window.onload événement.

window.location = "URL"; window.onload = function() {
document.getElementById('username-id').value = 'User'
document.getElementById('pwd-id').value = 'pass'
doLogin();
}

Comme la solution ci-dessus ne fonctionne pas, vous devriez tout de même être en mesure d'écrire une simple extension de navigateur pour résoudre votre problème. C'est simple : choisissez le navigateur que vous utilisez et suivez la documentation. C'est la seule façon de le faire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X