我目前正在开发gmail的chrome扩展程序。当用户打开电子邮件并从那里发送发件人的电子邮件地址时,我想触发一些操作。所以我提出的想法是通过原型拦截XMLHttpRequest.send
,如果此请求包含电子邮件数据,那么只需从那里触发我的事件。但是gmail不会发送任何休息请求并使用the dark force获取电子邮件正文。我真的很疑问谷歌如何获取电子邮件正文和其他数据页面。我的意思是新数据在页面中显示的唯一方法是通过rest
:
所有这些都可以通过dev-tools
进行检查。因此,我创建了一个代码段,为DOMSubtreeModified
的{{1}}添加了top
个侦听器。在侦听器内部,我用xpath查询正文,查看我打开的电子邮件数据。
E.g。我想了解gmail如何获取电子邮件document
的数据。我知道此电子邮件包含一些特定文字,例如A
。所以我只是在我的监听器中检查文档是否包含带有innerText random text r2d2
的节点。然后我只需检查random text r2d2
标签,查看在点击打开的电子邮件按钮和在页面中显示新文本之间发送的请求。 Here's the video to understand what I'm talking about.
Network
但问题是,电子邮件的数据显示在页面中,但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');
}
})
标签显示没有请求。数据如何进入页面甚至可能?我的意思是即使请求是从iframe发出的,它也会在Network
中显示出来。我还检查了谷歌是否打开了一个websocket(ws数据没有显示给Networks
) - 但它并没有!
有什么想法吗?有没有方法可以获取REST数据?
答案 0 :(得分:0)
事实证明,gmail会在显示电子邮件列表时预取电子邮件。打开电子邮件时,gmail只显示已经获取的变量中的数据。