我的Add-on SDK内容脚本如何与网站页面脚本交互?

nma*_*ier 5 javascript firefox firefox-addon firefox-addon-sdk

在我的SDK插件中,我想

  • 在页面脚本中调用函数
  • 导出,读取(get),写入(设置)或操作页面脚本中的某些变量或属性
  • 将新函数导出到或覆盖页面脚本中的现有函数
  • 或将自定义事件发布到页面脚本可以侦听的页面.

我的附加SDK内容脚本如何与网站通信?

nma*_*ier 3

与页面脚本交互的方式有很多种,官方文档中介绍了其中最常见的方式,包括问题中列出的所有方式。

请阅读“与页面脚本交互”

然而,应该指出的是,以安全的方式与页面脚本交互可能很困难。请特别注意,这unsafeWindow被称为不安全是有原因的:

使用 unsafeWindow 时要小心:您不能依赖它的任何属性或函数来实现或执行您所期望的操作。它们中的任何一个,甚至 setter 和 getter,都可以由页面脚本重新定义。除非您信任该页面,否则不要使用它,即使这样也要小心。

此外,unsafeWindow 不是受支持的 API,因此可能会在 SDK 的未来版本中删除或更改。

从 读取数据或执行函数unsafeWindow是安全的,因为它不能直接导致另一个(您的内容脚本)安全上下文中的代码执行。Javascript 发动机舱将确保这一点。

但确实,您绝对不能信任来自网站的数据。始终期望代码会抛出意外的无限循环或类似的拒绝服务。并且永远不要eval在内容脚本的上下文中显式或隐式地使用代码。

另外,永远不要认为您可以真正信任某个网站,即使它是您自己的网站。网站可能会受到损害(被黑客攻击),所有者可能会在未来发生变化,数据可能会在途中被更改(活跃的中间人攻击),或者另一个附加组件可能会修改它,等等。