2012-03-30 18 views
3

このJQueryコードは動作していますが、選択したタグから実際にURLを実行する方法を知る必要があります。JQueryを使用してHTTPイベントを傍受する

$("link, script, style, a, img").each(function() { 
    $(this).load(function() { 
     // get the URL and log it 
     console.log("Intercepted HTTP Event"); 
    }); 
}); 

最初に、ロード中に実際のURLを取得する必要があります。

次に、ロードイベントが発生する前に実際にキャッチすることが必要な場合があります。たとえば、画像やリンクがロードされる前です。また、私は例えば、imgタグは私が意味src="/somewhere/image.png"を持って、実行されるイベントのURLを変更する必要があり、これは私がのいずれかをachiveする方法GET/otherplace/image.png

に任意のアイデアを、それを変更する必要がありますGET /somewhere/image.pngの原因となりますこれら?

+0

質問、なぜmod_rewriteを使用しないでください?ホスト制限? –

+0

実際、私は特定のプロキシに書き換えていません。サーバー側で何かをする前に、クライアントでページがどのように動作するかを調べる必要があります。 –

+0

次に、開発マシンでmod_rewriteを使用します。 – kijin

答えて

1

$(this).load()要素の後の内容がロードされている起動します。したがって、$(this).attr("src")または$(this).attr("href")を実行してURLを取得できる可能性がありますが、HTTPリクエストの送信を停止するにはまだ遅すぎます。

現代のブラウザでは、AFAIKは、JavaScriptが最初にアセットをロードするのを防ぐ方法がありません。最高でも、src属性を変更することで、ページが読み込まれた後にイメージとスタイルシートを変更することができます。これを行う場合は、$(this).load()が無限ループにならないようにしてください。

+0

答えをありがとう、私がイベントをキャッチする必要がある理由は、GET /something.pngのようなHTTPイベントがページ上の別のjavascriptによって生成されるためです。 –

0

この問題にアプローチする1つの方法は、外部リソースのソースに1つのダミーリンク/隠しコントロールを持たせることですページがロードされると、そのようなコントロールがすべて実行され、それぞれのhtml要素が作成され、src属性が更新されてdomに追加されます。

ダミーコントロール:

<input type="hidden" source="/my/source/a.jpg" nodeType="img" class="specialControls"/> 
<input type="hidden" source="/my/source/1.js" nodeType="script" class="specialControls" /> 

とJavaScript

$(document).ready(function() 
{ 

    $(".specialControls").each(function(){ 
     var elementType=$(this).attr("nodeType"); 
     $('<'+elementType+'/>').attr('src', $(this).attr("source")) 
          .insertAfter($(this)) 

    }); 

}); 

・ホープ、このことができますし。