2013-02-18 5 views
0

У меня есть вкладка с, среди других вещей, следующее содержание:Chrome Расширение сообщений Timeout

<meta http-equiv="refresh" content="0; URL='whatsoever'" /> 

У меня также есть плагин работает, который регистрирует каждую вкладку с помощью этой техники:

chrome.tabs.onUpdated.addListener(doStuff); 

DoStuff -функция отправляет сообщение на вкладку:

function doStuff(tabId, changeInfo, tab){ 

    chrome.tabs.sendMessage(tabId, {'message': 'content'}, function(response){ 

     doOtherStuff(response); 

    }); 

} 

У меня есть зарегистрированный скрипт (не видно здесь), и в этом сценарии, это происходит:

function receiveMessage(request, sender, sendResponse){ 

    sendResponse({'content': 'responseData'}); 

} 

chrome.extension.onMessage.addListener(receiveMessage); 

Моя проблема заключается в том, что из-за мгновенного обновления, время отклика вне, и следующее сообщение об ошибке появляется в консоли:

Не удалось отправить Ответ: chrome.extension.onMessage listener должен вернуть true, если вы хотите отправить ответ после того, как слушатель вернется (сообщение отправлено расширением XYZ).

Почему это и как я могу обойти эту проблему? Заранее спасибо.

+0

Где ваша ** 'функция DoStuff()' **? – Sudarshan

+0

Он находится в background.js, который зарегистрирован в background-> scripts части манифеста. Это тот же файл, где находится первый фрагмент кода. – arik

ответ

0

В нем говорится, что функция receiveMessage должна выйти с возвратом true ;. Только после этого сообщение будет продолжать отправлять. В false, он прерывается в тот момент, когда функция возвращается. Так добавить возвращающие

см:

Эта функция становится недействительным, когда возвращается слушатель событий, если не возвращает истину от слушателя событий, чтобы указать, что вы хотите отправить ответ асинхронно (это будет держать канал сообщения открыт до с другого конца до тех пор, пока не будет вызван ответ «Отказ»).

из дока: https://developer.chrome.com/extensions/runtime#event-onMessage

function receiveMessage(request, sender, sendResponse){ 

    sendResponse({'content': 'responseData'}); 
    return true; 
} 

chrome.extension.onMessage.addListener(receiveMessage); 
Смежные вопросы