【发布时间】:2013-07-23 19:29:07
【问题描述】:
在我的 chrome 扩展程序的内容脚本中,我点击了来自某些网站的网页上的某些链接/按钮。为此,我在内容脚本中使用了以下代码(我在内容脚本中嵌入了 jQuery):
$(css_selector).trigger("click")
这适用于大多数网站。
但是,在 delta.com、match.com 和 paypal.com 等某些网站上,这种触发元素点击的方式不起作用。在 delta.com 上,当我尝试在内容脚本中触发时抛出以下异常:
Error: An attempt was made to reference a Node in a context where it does not exist.
Error: NotFoundError: DOM Exception 8
奇怪的是,如果我在 delta.com 上打开 javascript 控制台,包含一个 jQuery 并尝试相同的点击触发代码 sn-p,它就可以工作。
在 match.com 和 paypal.com 上,触发在内容脚本中根本不起作用,也没有错误。我什至无法像在 delta.com 上那样通过 javascript 控制台触发“点击”事件。
如果我手动使用鼠标点击,这三个站点上的一切都正常。因此,我也尝试使用 mousedown()、mouseup() 进行模拟,但也没有用。
这似乎是个问题,因为来自这些网站的 javascript 正在劫持和忽略事件。我试图从这些站点读取代码以查看发生了什么,但代码太多了。
有没有人知道这里发生了什么以及如何解决它?
【问题讨论】:
-
可能重复:how to send 'keydown' event to page's input? - jQuery 的
click触发函数不会触发非 jQuery DOM 点击监听器 (jsfiddle.net/k2W6M)。您的代码工作的站点可能已经使用 jQuery 作为其侦听器,因此您的 jQuery 触发器可以工作。或者,某些网站可能会check to see if your clicks are actual or programmatic。 -
我检查了,
$('li.business a')[0].click()似乎可以在 paypal.com 主页上使用。 -
@apsillers,谢谢。我关注了您的链接,并在最后一个链接中找到了答案。现在我创建 MouseEvents 并调度它。这适用于所有网站。
标签: javascript jquery google-chrome-extension