2016-05-22 13 views
1

私はFirefox API経由でlocation.reload();を傍受したい、またはページがロードされたり実行される前にJSを読んだり(リモート&が埋め込まれている)ページが実行される前にJavaScriptを読み込み/インターセプトする方法は?

例:私は(のGreaseMonkey & // @run-at document-startを介して)beforescriptexecuteイベントリスナーを試みたが、実行された後に、上記焼成する

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

更新:イベントbeforescriptexecuteは(スクリプトsrcといないスクリプトの内容に続いたが)要求を行う前に解雇されているので beforescriptexecuteはREMOTEスクリプトでうまく動作します。この例のように、スクリプトが通常のスクリプトタグ内(リモートではなく)にある場合は異なります。 beforescriptexecuteの火災とスクリプトの内容は書き換えられますが、それまでにはwindow.setTimeout()が既に起動して実行されています。

答えて

0

beforescriptexecuteが動作するはずです。その非Greasemonkeyのイベント:

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

イベント 'beforescriptexecute'が要求を行う前に解雇されているため、リモートスクリプトでうまく動作します:

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

あなたはこのようなものを行うことができます。この例のように、スクリプトが通常のスクリプトタグ内にある場合(リモートではない場合)は、まったく同じではありません。 'beforescriptexecute'の起動とスクリプトの内容の書き換えが可能ですが、' window.setTimeout() 'はすでに起動して実行しています。 – erosman

+0

非常に興味深い! – Noitidart

関連する問題