2016-05-22 11 views
1

Ich möchte location.reload(); über eine Firefox-API oder durch Lesen der JS auf der Seite (remote & eingebettet) abfangen, bevor es geladen/ausgeführt wird oder auf andere Weise möglich.Wie kann JavaScript auf der Seite gelesen/abgehört werden, bevor es ausgeführt wird?

Beispiel:

<head> 
    <script> 
     window.setTimeout(function() { location.reload(); }, 10000); 
    </script> 
</head> 

I beforescriptexecute Ereignis-Listener versucht haben (über Greasemonkey & // @run-at document-start), aber es wird AFTER oben abgefeuert wird ausgeführt.

Update: beforescriptexecute funktioniert gut auf REMOTE-Skripte da das Ereignis beforescriptexecute, bevor sie die Anforderung ausgelöst wird (aber dann auf das Skript src und nicht Skript Inhalt). Anders ist es, wenn das Skript innerhalb des normalen Skript-Tags (und nicht remote) ist, wie im Beispiel angegeben. Die beforescriptexecute Brände und der Skriptinhalt können umgeschrieben werden, aber bis dahin ist die window.setTimeout() bereits gefeuert und wird ausgeführt.

Antwort

0

Die beforescriptexecute sollte funktionieren. Es ist ein nicht-Grease Veranstaltung:

https://developer.mozilla.org/en-US/docs/Web/Events/beforescriptexecute

Sie können Dinge tun, wie folgt:

document.addEventListener("beforescriptexecute", function(e) { 

    src = e.target.src; 
    content = e.target.text; 

    if (src.search("i18n.js") > -1) { 
     // Stop original script 
     e.preventDefault(); 
     e.stopPropagation(); 
     window.jQuery(e.target).remove(); 

     var script = document.createElement('script'); 

     script.textContent = 'script you want'; 

     (document.head || document.documentElement).appendChild(script); 
     script.onload = function() { 
      this.parentNode.removeChild(this); 
     } 
     } 
+1

Es schön auf REMOTE Skripte seit dem Fall arbeitet 'beforescriptexecute', bevor sie die Anfrage ausgelöst wird. Es ist nicht genau dasselbe, wenn das Skript innerhalb des normalen Skript-Tags (und nicht remote) ist, wie im Beispiel angegeben. Die 'befortscriptexecute'-Brände und der Skript-Inhalt können neu geschrieben werden, aber zu diesem Zeitpunkt hat' window.setTimeout() 'bereits gefeuert und wird gerade ausgeführt. – erosman

+0

Ooo sehr interessant! – Noitidart

Verwandte Themen