2012-01-13 24 views
1

関連する画像やスクリプトなどをロードせずに、AJAXが要求したページで使用可能なDOMを取得する最良の方法は何ですか?イメージ/スクリプトを読み込まずに、バックグラウンドでページを読み込んで解析する方法は?

裏話: 私は(これは、ブラウザの拡張機能ですので、私はページそのものを制御することはできません)、その上にデータマイニングのソートを実行、その後、バックグラウンドでページをロードします。背景ページに画像を読み込んでスクリプトを実行する時間を費やしたくないのは、私が必要とするページの内容だけであるからです。 AJAX

  • 介し

  • +2

    URLをAJAXで要求する場合、DOMに追加しない限り、リソースをロードしないでください。 – Jonathan

    +0

    真ですが、DOMに追加しないとページの内容をどのように分析しますか? –

    +1

    これはページをどの程度正確に分析しているかによって異なりますが、DOMに追加する必要はありません。たとえば、jQueryを使用していた場合、要求がDOMにあった場合と同じセレクタを使用できます。 jQueryを使用できますか?これをどのブラウザでビルドしていますか?分析したいことについてもっと教えていただけますか? – Jonathan

    答えて

    0
    1. 負荷データはsrchref属性を含むすべてのタグを削除、または単にdata:nullとそれらの属性の値を変更します。データはまた、インラインスタイルが含まれている場合は、DOMへの外部リソース(例えば、背景と境界の画像、.htcコンポーネント、XULバインディング、.ICOカーソル)
    2. 追記フィルタリングされたデータへの参照を含むすべての文を削除し、それを
    を分析する必要があります

    ステップ2は、javascriptでの正規表現によって実現できます。例えば

    /* here we are in the ajax "success" callback */ 
    ... 
    data = data.replace(/(src|href|style)=['"]([^'"]+?)['"]/gi, 
    function(match, attribute) { 
        return (attribute.toLowerCase() === 'style') 
         ? attribute + '=""'    /* remove all inline style */ 
         : attribute + '="data:null"'; /* href and src set to data:null */ 
    
    }) 
    
    /* append filtered data */ 
    $(data).appendTo($('body_or_other_element')) 
    
    +0

    1.ブラックリストフィルタリングはフェールセーフ方式ではありません。 2. DOMは必要ありません。 –

    +0

    1. 100%安全ではありませんが、一般的なケースをカバーする必要があります。 2.あなたは明確にできますか? – fcalderan

    +0

    1.いいえ、それは「フェイルセーフではない」という定義です。「一般的なケース」は十分ではないため、実行しないでください。あなたがそれが問題であると思わない場合です。 2.他人からのコメントを読む。 –

    0

    可能であれば、上記のようにjQueryを使用します。これにより、必要に応じてページDOMの一部を簡単に選択することができます。ここで

    は、いくつかの例は以下のとおりです。

    あなたがタグにこのようなhref属性をつかむことができます。$( "A"、$(ajax_response))のattr( "HREFを");

    タイトルの内容:$( "title"、$(ajax_response))。html();

    セレクタをテストして最適な作業を確認する必要があるかもしれませんが、これは簡単な方法です。

    関連する問題