在我的 SDK 插件中,我想
- 在页面脚本中调用函数
- 在页面脚本中导出、读取(获取)、写入(设置)或操作某些变量或属性
- 在页面脚本中导出新函数或覆盖现有函数
- 或将自定义事件发布到页面脚本可以侦听的页面。
我的附加 SDK 内容脚本如何与网站通信?
在我的 SDK 插件中,我想
我的附加 SDK 内容脚本如何与网站通信?
与页面脚本交互的方式有很多种,官方文档中介绍了其中最常见的方式,包括问题中列出的所有方式。
请阅读“与页面脚本交互”。
但是,应该指出的是,以安全的方式与页面脚本交互可能很困难。请特别注意,unsafeWindow
之所以称为不安全是有原因的:
使用 unsafeWindow 时要小心:你不能依赖它的任何属性或函数是,或做,你期望的。它们中的任何一个,甚至是 setter 和 getter,都可以由页面脚本重新定义。除非您信任该页面,否则不要使用它,即使这样也要小心。
此外,unsafeWindow 不是受支持的 API,因此可以在 SDK 的未来版本中删除或更改它。
从 的数据读取或执行函数unsafeWindow
是安全的,因为它不能直接导致另一个(您的内容脚本)安全上下文中的代码执行。Javascript 引擎室将确保这一点。
但是,您绝对不能相信来自网站的数据,这是非常正确的。总是期望代码抛出,拒绝服务你用意想不到的无限循环或类似的。永远不要eval
在内容脚本的上下文中显式或隐式地使用代码。
另外,永远不要认为你真的可以信任一个网站,即使它是你自己的网站。网站可能会受到攻击(黑客攻击),所有者可能会在未来更改,数据可能会在途中更改(主动中间人攻击),或者其他附加组件可能对其进行了修改,等等。