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

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

在我的 SDK 插件中,我想

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

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

最佳答案

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

请阅读"Interacting with page scripts" .

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

Be careful using unsafeWindow: you can't rely on any of its properties or functions being, or doing, what you expect. Any of them, even setters and getters, could have been redefined by a page script. Don't use it unless you trust the page, and even then be careful.

Also, unsafeWindow isn't a supported API, so it could be removed or changed in a future version of the SDK.

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

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

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

关于javascript - 我的附加 SDK 内容脚本如何与网站页面脚本交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24378116/

相关文章:

firefox-addon - 如何在 Firefox Jetpack 附加组件中的背景脚本和内容脚本之间共享 javascript 代码?

javascript - 如何在 Rhino 脚本中实例化 java 泛型类?

javascript - 将参数传递给回调函数而不更改方法(Siesta 测试命名空间)

javascript - 使用 datetimepicker 禁用早于今天的日期

javascript - 如何替换两个特定元素之间的一些 HTML 标签?

javascript - 与 Firefox 相比,在 Chrome 中选择文本路径不会选择预期的文本

Javascript:调用 body 的 onload 事件中指定的函数的参数是什么?

javascript - 使用 saveURI() 下载不完整

selenium - java.net.ConnectException : Connection refused: connect while launching Firefox through GeckoDriver 异常

javascript - Firefox 扩展的 "Extension Storage"的数据存储在哪里?