[编辑]
我已将失败的代码缩减为更小的案例。
请参阅https://github.com/deg/tmp-chrome-extension-bug
这是https://developer.chrome.com/extensions/getstarted的略微修改后的副本,已更改为包含内容脚本和背景页。
即使在这个简单的扩展中,chrome.runtime.id有时也是未定义的。这看起来像是一个时间问题。
复制说明是回购自述文件。
[原文]
我的Chrome扩展程序带有后台脚本" background.js"
在这个文件中,在顶层,我有chrome.runtime.onMessage.addListener(...);
我通过对chrome://扩展中的扩展进行重新加载来测试。这通常有效,但有时chrome.runtime.onMessage未定义。
在调试中,我发现,只要发生这种情况,chrome.extension和chrome.runtime.id也是未定义的。
我可以解决问题"离开"通过反复按下重新加载按钮,直到它正确加载。
我最近第一次注意到这个问题,所以我认为这是我遇到的问题。 但是,经过一段时间的git bisect和hair-pulling,我发现问题出现在我最早的版本中;发生的频率要低得多。
在启动时看起来有一些计时问题 - 可能在我的代码加载之后才会初始化某些内容。因此,随着我的代码变得越来越长,我更经常地看到问题。 (只是一个猜测)
在后台执行chrome.runtime.onMessage.addListener的正确方法是什么。是否需要包装在onSomething中?我见过的例子也是在顶层做的。困惑!
答案 0 :(得分:1)
看起来这个问题是由于我在我的机器上加载的另一个扩展程序的错误交互造成的;可能是赛门铁克的“诺顿安全工具栏”。在https://code.google.com/p/chromium/issues/detail?id=565384
的并行讨论中提供了更多详细信息