Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Chrome扩展:并非所有API';s在chrome.runtime.reload()之后出现_Javascript_Google Chrome_Google Chrome Extension - Fatal编程技术网

Javascript Chrome扩展:并非所有API';s在chrome.runtime.reload()之后出现

Javascript Chrome扩展:并非所有API';s在chrome.runtime.reload()之后出现,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,我的Chrome扩展有一个问题,这取决于 chrome.tabsAPI 我的分机大部分运行正常。有时我会做一件事 chrome.runtime.reload()这几乎没有问题,但是 有时(我既不能预测何时也不能可靠地预测 在重新启动后后台脚本返回时复制它) chrome.tabs引用是未定义的。因为我依赖于那个API 分机无法启动。这种情况是可以检测到的,但当我 尝试执行chrome.runtime.reload(),chrome.runtime.reload 未定义。所以我没有办法重新启动 我

我的Chrome扩展有一个问题,这取决于
chrome.tabs
API

我的分机大部分运行正常。有时我会做一件事
chrome.runtime.reload()
这几乎没有问题,但是 有时(我既不能预测何时也不能可靠地预测 在重新启动后后台脚本返回时复制它)
chrome.tabs
引用是
未定义的
。因为我依赖于那个API 分机无法启动。这种情况是可以检测到的,但当我 尝试执行
chrome.runtime.reload()
chrome.runtime.reload
未定义
。所以我没有办法重新启动

我意识到我可能应该开发软重启功能 让我的扩展返回空白状态,但这是非常有用的 密集型,所以我想问问社区是否还有其他人有 在这种情况下,你是如何解决这个问题的 是吗

以下是我在
manifest.json
文件中的权限:

 "permissions": [
   "tabs",
   "contextMenus",
   "webNavigation",
   "webRequest",
   "webRequestBlocking",
   /* some whitelisted web URLs... */
非常感谢你的邀请 指给我看 这个问题似乎涵盖了完全相同的现象

我已经决定有足够的迹象表明这是一个bug 在chrome对背景页面的处理中

我还有一些补充意见:

  • @Xan指出的问题提到了 Chrome的背景页面

  • 当我在我的应用程序中调用
    chrome.runtime.reload()
    复制错误时 后台页面的开发者工具控制台我发现
    chrome.runtime.reload()
    像往常一样可供我的扩展插件使用 弹出式用户界面

  • 背景页(尚未)弃用,但在 建议改为迁移到事件页,它们不可能 在Chromium团队的优先列表中排名靠前。换句话说,我认为 这个bug的风险——如果它是一个bug的话——会有很高的被发现的风险 分类为
    'wontfix'
    ,因此,尝试似乎没有效果 等待解决问题

因此,我设计了一个解决方案,我认为将 直到我有足够的资源来开发 “我的扩展”或“迁移到事件页面”中的软重启功能:

鉴于:

  • 我的大多数扩展功能都是通过Chrome触发的
    浏览操作
    。在浏览器操作开始渲染之前,我可以 在后台页面上发布一条消息,我知道它会回电话 马上

  • 当扩展正常启动时,修复将只是一个简单的过程 没有对最终用户不可见的op

  • 由于修复的正常操作是不可操作的,因此修复不会损害 如果Chromium团队在将来的版本中修复了该缺陷,则扩展

  • “死亡”背景页将无法注册任何消息 听众。如果背景页面没有响应安全检查 消息,弹出窗口可以通过重新启动 分机

这是有代价的:如果弹出窗口等待“安全”按钮超时 net的消息并重新启动时,弹出的UI将被残酷地关闭 没有来自最终用户脚下的警告。不太好,但是之后 考虑到一些因素,我认为这种行为远远不够 比只是静静地停止工作的扩展更好 我现在可以做了


如果您有进一步的想法,请发表评论

我记得前面提到过这一点,知道这一点特别好,但有点坏,因为它指向了Chromium中一个公开的、显然很难解决的bug。我的理论是避免chrome.runtime.reload(),并在扩展本身中重新启动开发软件;只是事件页面更高效。您能否尝试创建一个最小的扩展,在新的配置文件中触发您的bug,并将其发布在?有了一个可复制的测试用例,调试问题并在Chrome端修复问题就更容易了。不,它没有被弃用,但在顶部有一个红色的“警告”。根据我的经验,软件项目往往避免在他们不推荐的子系统上提供支持。另外,原则上这是个好主意,但我的扩展太大了,时间紧迫。有了针对最坏症状的权宜之计,我以后可能能够更正确地看待这个问题。您的问题显示了webRequest API的使用,它还不能用于事件页面:。另外,我对Chrome做出了贡献,这看起来不像WontFix bug,所以如果你提供了一个可靠的测试用例,这个bug实际上可能会被修复。好吧,那么如果我尝试创建一个可复制的测试用例与否,这看起来将是一个发展经济学的问题。将来我也会密切关注webRequest用户的替代方案。