Как фоновая страница расширения Chrome должна взаимодействовать с несколькими скриптами содержимого? - PullRequest
1 голос
/ 24 августа 2010

У меня проблемы со связью с несколькими скриптами контента с моей фоновой страницы.Моя фоновая страница имеет код вроде:

chrome.tabs.sendRequest(tabId, { targetScript:"content1" }, function (resp) {
  if (resp.fromCorrectScript) {
    DoMoreStuff();
  }
});

, и у меня есть сценарии содержимого, такие как:

// content1.js
chrome.extension.onRequest.addListener(function (sender, request, sendResponse) {
  if (request.targetScript === "content1") {
    sendResponse({ fromCorrectScript:true });
  } else {
    sendResponse({});
  }
}); 

и

// content2.js
chrome.extension.onRequest.addListener(function (sender, request, sendResponse) {
  if (request.targetScript === "content2") {
    sendResponse({ fromCorrectScript:true });
  } else {
    sendResponse({});
  }
});

Я понимаю, что мой обратный вызов вФоновая страница должна вызываться дважды, один раз из каждого скрипта контента.Похоже, иногда он вызывается только дважды, и почти всегда, когда у меня есть точка останова в предложении if.Я что-то здесь не так делаю?

Спасибо,

-Грэг

Ответы [ 2 ]

0 голосов
/ 01 сентября 2010

Что ж, похоже, все работает правильно, пока я гарантирую, что только один контент-скрипт отвечает на сообщение. Так что мой код сценария контента должен быть больше похож на:

// content1.js
chrome.extension.onRequest.addListener(function (sender, request, sendResponse) {
  if (request.targetScript === "content1") {
    sendResponse({ fromCorrectScript:true });
  }
});

и

// content2.js
chrome.extension.onRequest.addListener(function (sender, request, sendResponse) {
  if (request.targetScript === "content2") {
    sendResponse({ fromCorrectScript:true });
  }
});
0 голосов
/ 24 августа 2010

Я не знаю, в чем корень проблемы, могу только догадываться, что какой бы скрипт ни выполнял обратный вызов, он сначала уничтожает его для остальных.

Хотя я могу предложить обходной путь. Вы можете отправлять запросы в обоих направлениях, а не только от фоновой страницы к сценарию. Так что ваша фоновая страница может выглядеть так:

chrome.tabs.sendRequest(tabId, { targetScript:"content1" });

chrome.extension.onRequest.addListener(function (request, sender, sendResponse) {
  if (request.fromCorrectScript) {
    DoMoreStuff();
  }
}); 

А в скриптах:

chrome.extension.onRequest.addListener(function (request, sender, sendResponse) {
  if (request.targetScript === "content1") {
    chrome.extension.sendRequest({fromCorrectScript:true});
  } else {
    chrome.extension.sendRequest({fromCorrectScript:false});
  }
}); 

Это не должно душить.

...