Почему chrome.runtime.sendMessage приводит к тому, что мой обратный вызов вызывается дважды при возникновении ошибки?

У меня есть следующий код в моем фоновом скрипте. Я отправляю сообщение в другое приложение, но в случае сбоя оно вызывается дважды (примечание: мой обратный вызов вызывается дважды. Мой код, вызывающий 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" );
    }
);

Есть ли способ отменить его, чтобы он больше не пытался? Почему ошибка приводит к двум вызовам моего обратного вызова?


person Don Rhummy    schedule 11.06.2013    source источник
comment
Мне кажется, это ошибка, зарегистрируйте ее на crbug.com. Включите полное приложение, если это возможно, чтобы ускорить возможность разработчика воспроизвести и исправить его.   -  person Vincent Scheib    schedule 12.06.2013


Ответы (1)


Я определял свой собственный Function.prototype.bind (в библиотеке JS, которую я включил), и это вызвало проблему! Понятия не имею, почему это вызывает так много ошибок и заставляет обратный вызов срабатывать дважды, но при удалении этого все ошибки исчезают!

person Don Rhummy    schedule 11.06.2013
comment
Внутренности системы расширений Chrome используют bind. Если вы переопределите эту функцию, начнут происходить странные вещи. Однако мы могли и должны защититься от этого. Было бы здорово, если бы вы могли сообщить об ошибке, как предложил Винсент. Вы можете отправить Винсенту и мне копию сообщения об ошибке. - person Ben Wells; 12.06.2013
comment
@BenWells Как вам, ребята, копировать? Мне нужны ваши письма? Я предполагаю, что размещаю отчет об ошибке по адресу: code.google.com/p/chromium. /проблемы/список - person Don Rhummy; 12.06.2013
comment
@BenWells, как мне отправить тебе копию об этой ошибке? - person Don Rhummy; 14.06.2013