我正在开发一个扩展,我对web-app之间的通信、扩展的content-script以及content-script和bit script之间的通信感到有点困惑。似乎要使用HTML5消息传递应用程序接口,但如何在精确的上下文中做到这一点不仅难以理解和实现,而且由于浏览器(似乎支持相同的应用程序接口)方法的不同而令人困惑。
例如,火狐不能识别manifest.json中的externally_connectable,这是一个为发出请求的主机分配权限的地方。那么,作为开发人员,Firefox希望您如何分配权限?我假设它希望你在content-script中这样做?
特别是,我对在应用程序和内容/背景脚本之间交换数据的最佳方式感到困惑。postMessage / addListener方法是最好的方式吗?它们是否在所有上下文中都有效;或者正如有人提到的:window.dispatchEvent应该是首选?
感谢所有与上述观点相关的指南。
发布于 2017-11-05 18:20:21
来自扩展外的消息不是我的经验(我不确定这是不是你的意思)。
你应该确保你彻底理解了chrome extensions overview,这绝对是必读的。
re Window.dispatch和使用其他API,我的建议是坚持使用chrome.xxx API,除非有一些它们不能做的事情。
在您的扩展中可能有3个作用域,它们只能通过消息传递进行通信,但是消息传递很容易实现,而且实际上可以带来良好的设计。
内容脚本是与页面本身交互的关键,但它们的作用域与页面不同,js是独立的,但它们当然可以访问DOM。
内容脚本可以在每个页面加载时加载,也可以通过在清单中包含一些页面来加载。或者更强大的是,它们可以被注入到后台页面或弹出窗口中-所以如果你打算从弹出窗口控制,你可以使用programmatic injection -一个有用的模式是弹出窗口(或后台)可以启动一个标签中的url,注入jQuery (任何版本,因为它是独立的),然后注入内容脚本,然后内容脚本可以使用$(document).ready()等待页面被加载(不需要使用jQuery,但事实上你可以不用关心页面是否有jquery,或者它可能有什么版本)是有用的。
如果你已经知道这么多,你可能不会像你想的那样困惑:)
https://stackoverflow.com/questions/47097256
复制相似问题