【问题标题】:How can my Add-on SDK content script interact with a website page script?我的附加 SDK 内容脚本如何与网站页面脚本交互?
【发布时间】:2014-06-24 04:01:21
【问题描述】:

在我的 SDK 插件中,我想

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

我的插件 SDK 内容脚本如何与网站通信?

【问题讨论】:

标签: javascript firefox firefox-addon firefox-addon-sdk


【解决方案1】:

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

请阅读"Interacting with page scripts"

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

使用 unsafeWindow 时要小心:您不能依赖它的任何属性或功能正在或正在执行您所期望的。它们中的任何一个,甚至是 setter 和 getter,都可以由页面脚本重新定义。除非您信任该页面,否则请勿使用它,即使那样也要小心。

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

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

但是,您绝对不能相信来自网站的数据。 总是期望代码抛出,拒绝服务你意外的无限循环或类似的。并且永远不要在内容脚本的上下文中显式或隐式地evaluate 代码。

另外,永远不要认为你真的可以信任一个网站,即使它是你自己的网站。网站可能会被入侵(被黑),所有者可能会在未来发生变化,数据可能会在途中被更改(活跃的中间人攻击),或者其他插件可能会修改它等等。

【讨论】:

  • 我不会使用unsafeWindoweval。一般而言(并非特定于 Addon SDK),我使用 Location hack 进行短代码,使用 Content Script Injection 进行全面注入,'beforescriptexecute' 用于防止或更改内容脚本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-25
  • 1970-01-01
  • 1970-01-01
  • 2014-09-16
  • 2018-12-29
相关资源
最近更新 更多