1

我正在创建 Firefox 插件以将 onclick 事件添加到特定按钮。(“输入”元素)

该按钮位于http://example.com/welcome#_pg=compose 但是当我打开页面时,出现以下错误:

类型错误:document.querySelector("#send_top") 为空

#send_top 是我要修改的按钮的 ID。因此,找不到该按钮。

发生此错误是因为http://example.com/welcomehttp://example.com/welcome#_pg=compose是完全不同的页面。在这种情况下,插件似乎正在加载http://example.com/welcome,但没有“#send_top”ID 的按钮。添加 #_pg=compose 锚点时,按钮由 JavaScript 加载。

如何加载http://example.com/welcome#_pg=compose来修改按钮?

4

1 回答 1

2

三个想法可以帮助您调试:

  1. 要正确匹配 url,您应该考虑使用正则表达式而不是页面匹配语法 - 这可能允许您以更可预测的方式对锚做出反应

  2. 我发现,在对 JS 大量修改的页面使用内容脚本时,可能会遇到时间问题。一个 hacky 解决方法可能是查找您想要的元素,如果它不存在,请执行 setTimeout 100 毫秒左右,然后重新检查。丑陋,是的,但它适用于我在新的 twitter UI 中使用的一些示例代码,例如。

  3. 您可以unsafeWindow在内容脚本中使用该变量直接访问页面的窗口对象——该对象将包含 JS 对页面所做的任何更改,并且不会被代理。但是,您应该unsafeWindow非常谨慎地使用它,因为它的使用可能存在安全问题。特别是,您永远不应该相信来自 的任何数据unsafeWindow

于 2012-04-16T19:36:25.520 回答