0

私はコンパイルまたはブラウザで実行する前に現在のWebページのJSコードを傍受したいdevツールにchrome拡張子を作成したいと思っています 実際には、 JSコードをブラウザで実行する前にクロムでexectutionの前にJSコードを傍受する方法

誰もそれが可能であるか、私たちを助けることはできますか?

多くの方々のおかげです。

+1

。 私は元のコードではなくインストルメント済みのコードを実行できます。 –

+0

これは非常に幅広い話題です。質問には「私はXが必要です。あなたは自分がすでに研究している/試したことを示して、質問を絞り込んでください。 [How to Ask](https://stackoverflow.com/help/how-to-ask)ガイドを参照してください。 – Xan

+0

はい、あなたは正しいです、実際に私は自分の問題を解決するよう求めていません。私の目標を達成するためにどの方向に研究すべきかについての示唆が必要です。おかげ –

答えて

0

は、ロードプロセス自体にフックするいかなる方法がありませんが、未知のタイプを持つスクリプトが、これはカスタムタイプを持つスクリプトが実行されないという事実と組み合わせて、以下のハックが依存するもので、スクリプトとして処理されていません。

​​を呼び出すと、ドキュメントがトラックに読み込まれなくなります。これをドキュメントの最上部に表示すると、ドキュメントが読み込まれなかったと見なすことができます。

次に、ドキュメントの内容を取得するためのXHR要求を行い、ドキュメントのすべてのスクリプトを不活性にするための検索と置き換えを行います。資料。この時点で

window.stop(); 
var request = new XMLHttpRequest(); 

request.open('GET', location.href); 
request.onload = function(event) { 
    var html = request.responseText 
    .replace(/type=\"text\/javascript\"/g, '') 
    .replace(/<script/g, '<script type="x-instrument/javascript"'); 

    document.open(); 
    document.write(html); 
    document.close(); 
}; 

request.send(null); 

、すべてのスクリプトが不活性にされている、基本的なシーケンシャルローダは次のようになります。これにより

setTimeout(function next(index) { 
    var script = document.scripts[index]; 
    if (script == null) { 
    return setTimeout(callback, 0); 
    } 

    if (script.hasAttribute('src')) { 
    var request = new XMLHttpRequest(); 
    request.open('GET', script.getAttribute('src')); 
    request.onload = function() { 
     var code = instrument(request.responseText); 
     eval(code); 

     setTimeout(next, 0, ++index); 
    }; 

    request.send(null); 
    } else { 
    var code = instrument(script.textContent); 
    eval(code); 

    setTimeout(next, 0, ++index); 
    } 
}, 0, 0); 

を、任意のページにはには、このスクリプトを挿入することにより、インストルメントすることができます文書の始まり。

クロム拡張でコンテンツスクリプトとして読み込むこともできますが、run_atdocument_startに設定されていることを確認してください。彼らは、ブラウザによってロードされる前に、私は、スクリプトを傍受することができますどのようにクロームのdevのツールの拡張機能で

{ 
    "manifest_version": 2, 
    "name": "instrument", 
    "version": "0.0.0", 
    "content_scripts": [ 
    { 
     "matches": ["<all_urls>"], 
     "js": ["instrument.js"], 
     "run_at": "document_start" 
    } 
    ], 
    "web_accessible_resources": [ 
    "instrument.js" 
    ], 
    "permissions": [ 
    "tabs", "<all_urls>" 
    ] 
} 

Example

+0

これは実行可能なアイデアですが、XHRは元のリクエストの一部のプロパティを失い、一部のサイト(たとえばリファラー)が破損する可能性があります。 – Xan

+0

@Xan真、別のアプローチは、文書がロードを継続させるが、オープンを書くことで ''