无法从XMLHttpRequest触发单击

我写了一篇关于此的类似post,但由于过于本地化而关闭了。 经过一些研究和测试,我认为我找到了问题的根源,这个问题应该更好地解释,希望更有帮助。

使用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而无需鼠标点击控制台。 仍然不是我需要的,但也许它是朝着正确方向迈出的一步

编辑2 :根据这篇文章和其他人,最好不要使用点击,因为它只适用于IE。 所以我编辑了我的代码,但直到不起作用……真糟糕

EDIT3作为Fabien Quatravaux,这里的问题是ajax请求响应没有加载到当前的DOM中,所以我不能调出事件(我可以,但它不会做任何事情)。 所以问题是如何使用xmlhttprequest,转到页面使用,触发事件然后获得生成的DOM? 再次感谢Fabien指出这一点。

我认为XmlHttpRequest没有响应属性。 我想你可以使用responseText并操作DOM(即添加一个按钮) – 然后你可以点击按钮并制作另一个XmlHttpRequest。

编辑:

我坚持认为,我认为它确实有一个 – 我从来没有用过这种方式。

我认为更大的问题是假设您在响应中找回了一个文档,并且找到了一个按钮并导致了click事件,那么应该发生什么。 我认为你没有任何与click事件有关的东西。

我也同意其他post,你绝对应该使用jQuery。 好像你只是试图调用连续的AJAX请求,不是吗?

修改xhr.response.getElementById(“simulate-button”)。click(); to document.getElementById(“simulate-button”)。click();

删除$(xhr.response).ready函数

修改sendToLog = xhr.response.getElementsByClassName(“story-score”); to sendToLog = document.getElementsByClassName(“story-score”);

作为Fabien Quatravaux,这里的问题是ajax请求响应没有加载到当前的DOM中,因此我无法调用该事件。 我只需打开一个新标签并直接转到该页面即可解决此问题。 退回到此解决方案是用户可以看到此选项卡,但至少它可以工作。

谢谢大家的帮助。