【发布时间】:2017-08-24 19:47:43
【问题描述】:
我遇到了一个非常奇怪的问题,我开发了一个 Web 扩展,它使用内容脚本和后台脚本之间的消息传递(使用 chrome.runtime.connect)和原生消息传递。
我面临的问题是,当我安装扩展程序时(事先从商店手动安装,然后连接到我的网站,一切都按预期工作,chrome.runtime.connect 工作并将有效端口返回到后台脚本.
但是,当我从我的网站进行扩展的内联安装以解决必须导航以在网页中包含内容脚本的事实时,我使用
手动将内容脚本注入我的页面 function injectContentScript() {
var s = document.createElement("script");
s.setAttribute("src", "chrome-extension://<extensionid>/content.js");
document.head.appendChild(s);
}
和完全相同的内容脚本但手动注入的行为不一样。 chrome.runtime.connect 返回一个空对象,而 chrome.runtime.lastError 给了我
无法建立连接。接收端不存在。
我在发送方调用(content.js - 手动注入的内容脚本)chrome.runtime.connect(extensionID) 其中扩展 id 是 chrome 网上商店生成的扩展的 id。而在接收端(background.js - 扩展后台脚本)chrome.runtime.onConnect.addListener(onPortConnected);
我不太确定如何调试这个问题,也许是时间问题? 即使使用内联安装,后台脚本也能很好地执行(我已经添加了日志并通过 chrome 扩展管理器中的 background.html 对其进行了调试)
任何帮助将不胜感激!
【问题讨论】:
-
从您的问题中不清楚 sending 方是什么以及它是如何执行的。
-
确实,(我刚刚编辑了问题)但是“发送”端是内容脚本,“接收”端是后台脚本。希望这更清楚一点
-
您应该不在扩展程序内向
connect()提供扩展程序ID!这仅适用于跨扩展消息传递。此外,还不清楚安装后何时会发生这种情况。 -
啊,你可能误会了什么。内容脚本在安装时不注入到匹配的页面中。只有安装后的新导航才会运行内容脚本。您是否尝试在安装后不导航的情况下发送此消息?
-
这再次敲响了一些警钟。可以包含注入代码吗?
标签: javascript google-chrome google-chrome-extension