我的附加 SDK 内容脚本如何与网站页面脚本交互?

IT技术 javascript firefox firefox-addon firefox-addon-sdk
2021-03-07 15:01:58

在我的 SDK 插件中,我想

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

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

1个回答

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

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

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

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

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

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

但是,您绝对不能相信来自网站的数据,这是非常正确的。总是期望代码抛出,拒绝服务你用意想不到的无限循环或类似的。永远不要eval在内容脚本的上下文中显式或隐式地使用代码。

另外,永远不要认为你真的可以信任一个网站,即使它是你自己的网站。网站可能会受到攻击(黑客攻击),所有者可能会在未来更改,数据可能会在途中更改(主动中间人攻击),或者其他附加组件可能对其进行了修改,等等。

我不会使用unsafeWindowor eval一般而言(并非特定于 Addon SDK),我使用 Location hack 作为短代码,使用 Content Script Injection 进行全面注入以及'beforescriptexecute'防止或更改内容脚本。
2021-05-13 15:01:58