我为此写了一篇类似的帖子,但由于过于本地化而被关闭。经过一番研究和测试,我想我找到了问题的根源,这个问题应该得到更好的解释,希望对你有帮助。
使用 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 获取内容。
任何帮助将不胜感激。
先感谢您
EDIT删除了第二个 onload,并添加了 xhr.response。现在它在没有鼠标点击的情况下打印 DOM 到控制台。仍然不是我需要的,但也许这是朝着正确方向迈出的一步
EDIT2:根据这篇文章和其他人,最好不要使用点击,因为它只适用于 IE。所以我编辑了我的代码,但直到不起作用......真可惜
EDIT3作为 Fabien Quatravaux,这里的问题是 ajax 请求响应没有加载到当前的 DOM 中,所以我无法调用该事件(我可以但它不会做任何事情)。所以问题是我如何使用 xmlhttprequest,转到使用的页面,触发事件,然后获取生成的 DOM?再次感谢 Fabien 指出这一点。