私は現在、Gmailのクロム拡張を開発中です。ユーザーが電子メールを開いて送信者の電子メールアドレスをそこから開いたときに、いくつかのアクションをトリガーしたい。だから私が思いついたのは、プロトタイプを介してXMLHttpRequest.send
を傍受し、このリクエストに電子メールデータが含まれていればそこからイベントをトリガーすることです。しかしgmailは休憩リクエストを送信せず、the dark forceを使ってメールの本文を取得します。私は実際にGoogleがどのように電子メールの本文と他のデータをページングするのか疑問に固執しています。私は、新しいデータがページに表示されることができる唯一の方法はrest
経由であることを意味:gmailがデータをページに取り込む方法
- フォームの提出
- のXMLHttpRequest
- WebSocketを
それらのすべてがdev-tools
を経由して検査することができます。そこでdocument
のtop
にDOMSubtreeModified
リスナーを追加するスニペットを作成しました。リスナーの内部では、開かれている電子メールデータをxpathで照会します。
など。私はGmailのメールアドレスA
をどのように取得したのかを知りたい。このメールにはrandom text r2d2
のような特定のテキストが含まれています。だから私はちょうど文書がinnerText random text r2d2
とノードを含んでいるかどうか私のリスナーをチェックインします。そして、その後、私はちょうどNetwork
タブをチェックして、開いている電子メールボタンをクリックしてページに新しいテキストを表示する間に送られた要求を確認します。 Here's the video to understand what I'm talking about.
function findEleWithText(text) {
let parent = document.body;
let results = [];
let query = document.evaluate("//*[contains(text()," + text + "')]",
parent || document,
null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
for (let i=0, length=query.snapshotLength; i<length; ++i) {
results.push(query.snapshotItem(i));
}
return results;
}
document.addEventListener('DOMSubtreeModified', e => {
var e2 = findEleWithText("2:09 p.m.", document.body)
if (e2.length > 0) {
console.log('e');
}
})
しかし、ここが問題だ、電子メールのデータがページ内に表示されますが、Network
タブには、要求がなされなかったことを示しています。データがページに移動することはどのように可能ですか?たとえ要求がiframeからなされたとしても、とにかくNetworks
に表示されます。私もgoogleがwebsocketを開くかどうか確認しました(wsデータはNetworks
に表示されていません)。
アイデア? RESTを使用せずにデータをフェッチする方法はありますか?