9 votes

Greasemonkey contre une iframe en utilisant @include - est-ce que cela fonctionne ?

Je me demande s'il est possible de faire en sorte que Greasemonkey s'exécute uniquement sur une iframe et non sur sa fenêtre mère. La fenêtre parent est le domaine A, l'iframe est le domaine B, et l'inclusion dans le script serait @include http://domain-B.com/path/ *.

Je n'ai pas besoin d'interaction avec le parent. J'ai essayé plusieurs fois sans succès. Existe-t-il une restriction inter-domaine empêchant quelqu'un d'exécuter contre l'iframe ?

PS : L'iframe a un code JS qui l'empêche de se charger en tant que fenêtre supérieure.

11voto

npdoty Points 3253

Il est tout à fait possible de faire fonctionner Greasemonkey contre une iframe. question commune pour déterminer comment l'empêcher de s'exécuter sur les iframes ainsi que sur la page principale. Vous devriez être en mesure de prendre l'inverse de cette réponse pour empêcher le code de s'exécuter sur la fenêtre supérieure :

if (window.top == window.self)  //don't run on the top window
    return;
//rest of the actual executing code goes here

Je l'ai testé et vous pouvez utiliser @include pour correspondre au domaine B (le domaine de l iframe ) et exécuter un morceau de code arbitraire qui le modifie. J'ai exécuté le test userscript suivant sur un page de test et il réussit à masquer le logo Google (uniquement lorsque Google est dans une iframe ).

// @include  http://www.google.com*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js
// ==/UserScript==

if (window.top == window.self)  //don't run on top window
    return;

alert('running on a frame');

$('img').each(function() {
  $(this).hide();
});

Pour autant que je sache, il n'y a pas de restrictions inter-domaines impliquées ici. Je ne suis pas sûr de ce qui se passe si le iframe n'est pas présent lors du premier chargement de la page (qui est le moment où Greasemonkey s'exécute).

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