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

Javascript 我的附加SDK内容脚本如何与网站页面脚本交互?,javascript,firefox,firefox-addon,firefox-addon-sdk,Javascript,Firefox,Firefox Addon,Firefox Addon Sdk,在我的SDK插件中,我想 调用页面脚本中的函数 导出、读取(获取)、写入(设置)或操作页面脚本中的某些变量或属性 将新函数导出到页面脚本或重写页面脚本中的现有函数 或者将自定义事件发布到页面脚本可以侦听的页面 我的附加SDK内容脚本如何与网站进行通信?与页面脚本交互的方式有多种,官方文档中介绍了最常见的方式,包括问题中列出的所有方式 请阅读。 然而,应该指出的是,以安全的方式与页面脚本交互可能很困难。请特别注意,unsafeWindow被称为不安全窗口是有原因的: 使用unsafeWindo

在我的SDK插件中,我想

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

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

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

请阅读。

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

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

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

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

但你绝对不能相信来自网站的数据,这是千真万确的。 总是期望代码抛出,拒绝服务,并以意外的无限循环或类似的方式向您发送。永远不要在内容脚本的上下文中显式或隐式地评估代码


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

这是对这些类型问题的规范回答。这个问题是从wiki链接的。我将链接移到了它所属的IMHO。我不会使用
unsafeWindow
eval
。一般来说(并非特定于插件SDK),我使用Location hack编写短代码,使用内容脚本注入进行全面注入,使用
'beforescriptexecute'
防止或更改内容脚本。