无法使用 Chrome 扩展程序单击按钮,但我可以在开发人员工具中单击
Can't click a button using a Chrome extension, but I can in the developer tools
我正在尝试创建一个Chrome扩展程序,其唯一目的是单击YouTube视频的"喜欢"按钮。然后,我可以将扩展名映射到快捷键,然后按Alt-L
或其他键来喜欢视频。
我使用开发人员工具找到了按钮的 XPath。
因此,我在扩展中用于单击按钮的JavaScript代码是这样的:
var btn = document.evaluate('//*[@id="watch8-sentiment-actions"]/span/span[1]/button',document,
null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null).snapshotItem(0);
console.log(btn);
console.log("About to click like");
btn.click();
console.log("Just clicked like");
document.evaluate()
实际上找到了按钮。在Chrome开发人员工具的控制台中,我看到输出:
<button (all the other button details are printed)...>...</button>
About to click like
Just clicked like
但是,它实际上并没有单击该按钮。
但是,如果我在开发人员工具的控制台中执行完全相同的代码,它实际上会单击该按钮。
有人知道为什么它可以在开发人员工具的控制台中工作,但不能在扩展中工作?
此外,我还下载了一个名为Custom JavaScript for Sites的扩展,它将JavaScript代码注入网站。我得到的结果(正确的输出,但实际上没有单击按钮(,就像我从扩展执行 JavaScript 一样。
编辑:
由于我无法发布我自己问题的答案 - 对于遇到类似问题的未来读者,您只需要在调用click()
之前向元素添加一个事件处理程序。
工作代码是这样的:
// Get the element to click
var btn = document.evaluate('//*[@id="watch8-sentiment-actions"]/span/span[1]/button',document,
null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null).snapshotItem(0);
console.log(btn);
// Attach an event handler to the button
btn.addEventListener('click', function myClick(){
var evt = document.createEvent("MouseEvents");
evt.initMouseEvent("click", true, true, window,
0, 0, 0, 0, 0, false, false, false, false, 0, null);
});
// Click the button
console.log("About to click like");
btn.click();
console.log("Just clicked like");
可能只有IE和Firefox具有click((函数。有一种方法可以通过发送鼠标事件来发生点击事件:
var button = document.getElementById("foo_button");
var e = document.createEvent("MouseEvents");
e.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false,
false, false, false, 0, null);
button.dispatchEvent(e);
相关文章:
- 何时可以;我的用户脚本在Javascript中触发右键单击(上下文菜单)
- 不同'单击'不同脚本中的回调:我可以控制执行顺序吗
- 单击我网站中的链接时打开新选项卡,保持当前选项卡处于活动状态
- 我可以't阻止JQuery上的按钮单击事件
- 我的用户可以通过单击Ajax之外的按钮来访问$_SESSION的内容吗
- 我需要一个注册按钮,它可以将数据发送到mySQL服务器,也可以在单击时重定向
- 为什么可以't我生成一个'单击'事件
- 单击我的joomla网站上的模块标题以指向一篇文章
- 单击我的导航按钮时切换我的菜单
- 如何让 VB Web 浏览器控件单击无法在控件中手动单击但可以在实际 IE 窗口中单击的按钮
- 在按钮上运行Jquery代码的问题单击我的向导步骤Jquery代码
- 单击按钮可以修改html元素
- 如何在用户单击我的iFrame时调用此函数
- 如何在用户单击我的扩展插件上的按钮时插入文本
- 当单击我网站上的任何链接 (a) 时,如何运行 jQuery 函数
- I'在包含Angularjs代码后,我无法在Chrome中右键单击我的网页
- 给定一个具有多个提交按钮的表单,我可以单独控制它们吗
- 单击后可以加载窗口吗
- 骨干表单.js - 我可以在脚本中配置文本字段,或者在渲染后使用 jQuery 完成它
- 停止运行这个脚本?"消息,当用户单击我的HTML选择元素时出现