【问题标题】:Why does chrome.runtime.sendMessage result in my callback being called twice when there's an error?为什么 chrome.runtime.sendMessage 会导致我的回调在出现错误时被调用两次?
【发布时间】:2013-06-07 21:28:42
【问题描述】:

我的后台脚本中有以下代码。我向另一个应用程序发送一条消息,但如果它失败了,它会被调用两次(注意:我的回调被调用了两次。我的代码调用 sendMessage 只被调用一次)!

chrome.runtime.sendMessage(
    otherAppId,
    someObject,
    function (response)
    {
        var lastError = chrome.runtime.lastError;

        //This likely means it doesn't exist ("Could not establish connection. Receiving end does not exist.")
        if ( lastError && lastError.message.indexOf( "not exist" ) !== -1 )
        {
            ///This gets called twice!
            console.log( "we're here twice?!" );
        }

        //This is called once
        else console.log( "Was successful, so called only once" );
    }
);

有没有办法取消它,让它停止重试?为什么一个错误会导致两次调用我的回调?

【问题讨论】:

  • 对我来说听起来像是一个错误,请将其归档到 crbug.com。如果可能的话,包括一个完整的应用程序,以加快开发人员复制和修复它的能力。

标签: google-chrome google-chrome-extension google-chrome-devtools google-chrome-app


【解决方案1】:

我正在定义自己的Function.prototype.bind(在我包含的 JS 库中),这导致了问题!不知道为什么这会导致这么多错误并导致回调触发两次,但删除它会使所有错误消失!

【讨论】:

  • chrome扩展系统内部使用bind。如果你重新定义这个函数,奇怪的事情就会开始发生。但是,我们可以而且应该防止这种情况发生。如果您能按照文森特的建议提交一个关于此的错误,那就太好了。您可以抄送 Vincent 和我自己的问题。
  • @BenWells 我该如何抄送你们?我需要你的电子邮件吗?我假设我将错误报告放在:code.google.com/p/chromium/issues/list
  • @BenWells 我该如何抄送你的那个错误?
猜你喜欢
  • 2012-08-02
  • 2016-04-01
  • 2012-09-03
  • 1970-01-01
  • 2020-08-16
  • 1970-01-01
  • 2019-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多