12

いくつかのローカル.jsファイルをWebページに挿入したいと思います。私のブラウザ内のように、私は単にクライアント側を意味します。ページを表示するために他の人がページにアクセスする必要はありません。<script>.jsファイルを取得して、そのファイルがタグを介してページのhtmlに含まれているかのように作成する必要があります。

ページが読み込まれてからローカルファイルの内容が利用可能になるまでに1秒かかる場合は問題ありません。

これをコンソールなどで「手作業で」行うためにコンピューターの前にいなければならない場合でも問題ありません。

私はこれを2日間試み、Greasemonkeyを試し、JavaScriptコンソールを使用してファイルを手動でロードしようとしました。これを行うための確立された方法が(明らかに)ないことに驚かされます。やりたいことはとても簡単なことのようです。とはいえ、単純なことは一般的なことと同じではないと思います。

それが役に立ったら、私がこれをやりたい理由は、JSベースのチャットクライアントでチャットボットを実行するためです。ボットのコードの一部が既存のチャットコードに混在しています。そのために、Fiddlerが... / chat.jsへのリクエストをインターセプトし、ローカルファイルに置き換えています。しかし、ページ自体にあるものから「独立」している2つの.jsファイルがあります。ページから要求された.jsファイルの代わりに使用できるものがないため、Fiddlerを使用できません。

4

4 に答える 4

4

OnBeforeResponse(oSession: Session)すでにフィドラースクリプトを使用しているため、関数で次のようなことができます

    if ( oSession.oResponse.headers.ExistsAndContains("Content-Type", "html") &&
         oSession.hostname.Contains("MY.TargetSite.com") ) {

        oSession.oResponse.headers.Add("DEBUG1_WE_EDITED_THIS", "HERE");

        // Remove any compression or chunking
        oSession.utilDecodeResponse();

        var oBody = System.Text.Encoding.UTF8.GetString(oSession.responseBodyBytes);

        // Find the end of the HEAD script, so you can inject script block there.
        var oRegEx = oRegEx = /(<\/head>)/gi
        // replace the head-close tag with new-script + head-close 
        oBody = oBody.replace(oRegEx, "<script type='text/javascript'>console.log('We injected it');</script></head>");

        // Set the response body to the changed body string
        oSession.utilSetResponseBody(oBody); 
    }

www.html5rocks.com の作業例:

    if ( oSession.oResponse.headers.ExistsAndContains("Content-Type", "html") &&
         oSession.hostname.Contains("html5rocks") ) { //goto html5rocks.com
        oSession.oResponse.headers.Add("DEBUG1_WE_EDITED_THIS", "HERE");
        oSession.utilDecodeResponse();
        var oBody = System.Text.Encoding.UTF8.GetString(oSession.responseBodyBytes);
        var oRegEx = oRegEx = /(<\/head>)/gi
        oBody = oBody.replace(oRegEx, "<script type='text/javascript'>alert('We injected it')</script></head>");
        oSession.utilSetResponseBody(oBody); 
    }

fiddler でストリーミングをオフにする必要があることに注意してください: http://www.fiddler2.com/fiddler/help/streaming.aspそして、HTTPS をデコードする必要があると思います: http://www.fiddler2.com/fiddler/ヘルプ/httpsdecryption.asp

私はフィドラー.Net拡張機能を支持して、フィドラースクリプトをますます使用していません- http://fiddler2.com/fiddler/dev/IFiddlerExtension.asp

于 2012-04-28T18:26:51.207 に答える
4

Chrome を使用している場合は、dotjsを確認してください。

それはあなたが望むことを正確に行います!

于 2012-04-28T19:10:22.730 に答える
0

jquery の jQuery.getScript() メソッドを使用するだけではどうですか?

http://api.jquery.com/jQuery.getScript/

于 2012-04-28T18:00:36.487 に答える
0

通常のhtmlページをファイルシステムに保存し、手動でjsファイルを追加してから、フィドラーを使用してそれらの呼び出しをインターセプトし、htmlファイルのバージョンを取得します

于 2012-04-28T18:01:05.577 に答える