1

これについて同様の投稿を書きましたが、ローカライズしすぎたために閉じられました。いくつかの調査とテストの後、私は問題の原因を見つけたと思います.この質問はよりよく説明され、うまくいけばより役立つはずです.

XMLHttpRequest を使用して、ページに移動し、マウス クリックをシミュレートしてから、コンテンツを取得する必要があります。ここに私が書いたコードがあります:

var sendToLog;
var xhr = new XMLHttpRequest();
xhr.open('GET', '/newsfeed-simulator', true);
xhr.responseType = 'document';
xhr.onload = function(e) {
  if (this.status == 200) 
  {

    var event = xhr.response.createEvent("MouseEvents");
event.initMouseEvent("click", true, true, window,
            0, 0, 0, 0, 0,
            false, false, false, false,
            0, null);
xhr.response.getElementById("simulate-button").dispatchEvent(event);

    $(xhr.response).ready(function() 
    {
        console.log(xhr.response.body);
        sendToLog = xhr.response.getElementsByClassName("story-score");
    });

    chrome.extension.sendMessage({writeToLog: sendToLog});  

}
}

xhr.send();

問題は、クリックイベントが機能しないことです。それも試してみましxhr.response.getElementById("simulate-button").click();たが無駄でした。

何が問題なのかわからない? それは簡単なことです:ページに行き、それがロードされるのを待ち、ボタンをクリックし、再びロードされるのを待ってから、DOM からコンテンツを取得します。

どんな助けでも大歓迎です。

前もって感謝します

編集により、2 番目のオンロードが削除され、xhr.response が追加されました。これで、コンソールへのマウス クリックなしで DOM が出力されます。まだ必要なものではありませんが、正しい方向への一歩かもしれません

EDIT2この投稿や他の人によると、クリックはIEでしか機能しないため、使用しない方がよいでしょう。だから私は自分のコードを編集しましたが、うまくいきません...残念

EDIT3 Fabien Quatravaux として、ここでの問題は、ajax 要求の応答が現在の DOM に読み込まれていないため、イベントを呼び出すことができないことです (できますが、何もしません)。問題は、xmlhttprequest を使用してページに移動し、イベントを発生させて、結果の DOM を取得するにはどうすればよいかということです。これを指摘してくれたFabienに再び感謝します。

4

3 に答える 3

0

Fabien Quatravaux として、ここでの問題は、ajax 要求応答が現在の DOM に読み込まれていないため、イベントを呼び出すことができないことです新しいタブを開いてそのページに直接移動するだけで、この問題を解決しました。このソリューションの欠点は、ユーザーがこのタブを表示できることですが、少なくとも機能します。

助けてくれてありがとう。

于 2013-02-23T13:03:27.763 に答える
0

XmlHttpRequest に応答プロパティがあるとは思わない。responseText を取得して DOM を操作する (つまり、ボタンを追加する) と思います。その後、ボタンをクリックして別の XmlHttpRequest を作成できます。

編集:

私は修正されたままです.1つあることがわかります-私はこのように使用したことがありません.

より大きな問題は、応答でドキュメントを取得し、ボタンを見つけてクリックイベントを発生させると仮定すると、どうなるかということだと思います。クリックイベントに接続されているものは何もないと思います。

jQueryを必ず使用する必要があるという他の投稿にも同意します。連続する AJAX リクエストを呼び出そうとしているようですね。

于 2013-02-22T17:05:07.890 に答える
-1

xhr.response.getElementById( "simulate-button")。click();を変更します。document.getElementById( "simulate-button")。click();に移動します。

$(xhr.response).ready関数を削除します

sendToLog = xhr.response.getElementsByClassName( "story-score");を変更します。sendToLog = document.getElementsByClassName( "story-score");に送信します。

于 2013-02-22T19:23:28.020 に答える