@MohamedMansour Как вызвать функцию фоновой страницы, функцию сценария содержимого, функцию popup.html из информационной панели расширения Google Chrome.

читал и перечитал эту страницу, а также запустил образцы:

http://code.google.com/chrome/extensions/background_pages.html

Но я, кажется, не понимаю, как установить фоновую связь между background.html, popup.html и content.js. Я хочу отправлять сообщения для запуска функций, получения ответов и обработки этих ответов. Пример карты был чем-то вроде того, чтобы помочь мне, но мне просто нужно что-то очень простое и мне не нужны все эти карты. (Обратите внимание, я знаю jQuery так же хорошо, как и Javascript, поэтому не стесняйтесь смешивать немного jQuery, если хотите.)

Ответы на вопрос(1)

Решение Вопроса

всплывающее окно, информационная панель, действие страницы выполняются внутри одного расширения. Думайте об этом как о веб-странице с одним доменом. И этот домен является идентификатором вашего расширения. Каждая из этих страниц расширения похожа на обычную страницу ( похоже, когда вы разрабатываете сайт).

Все страницы расширения (упомянутые выше) могут легко общаться друг с другом, у вас есть несколько способов сделать это:

chrome.extension.getBackgroundPage ()

Вы делаете это напрямую! Я использую этот подход, когда могу. Это чище, на мой взгляд.

var bkg = chrome.extension.getBackgroundPage();`  
bkg.ping();`

chrome.extension.onRequest.addListener а такжеchrome.extension.sendRequest

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

popup.html

chrome.extension.sendRequest({method: 'ping'}, function(response) {
   // response.result
});

background_page.html

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
    if (request.method == 'ping') {
        sendResponse({result: 'pong'});
    }
});

Теперь есть разница между "страницами расширения" и "Сценарии содержимого". Пожалуйста, внимательно прочитайте этот документ, чтобы понять его. Сценарий содержимого не является страницей расширения, вы не можете делать то, что делают страницы расширения. Вы не можете напрямую общаться ни с одной из упомянутых выше страниц. Сценарии содержимого - это файлы JavaScript, которые выполняются в контексте веб-страниц, а не страниц расширения. Это важное различие, чтобы признать.

Поэтому для связи между вашими страницами расширения и скриптом контента вам необходимо использоватьобмен сообщениями, На этой странице много информации, я настоятельно рекомендую вам прочитать ее. Это очень похоже на то, как мы использовали обмен сообщениями (шаг 2 выше), но отличается только от того, как вы отправляете запрос. Вам нужно будет использоватьchrome.tabs.sendRequestпотому что вам нужно отправить один запрос к скрипту содержимого со страницы расширения (фон, всплывающее окно, страница и т. д.). Вам нужно знать идентификатор вашей вкладки, чтобы сделать это. Пожалуйста, посмотрите наAPI вкладок для получения дополнительной информации.

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

Я ответил на многие вопросы и на других людей относительно подобных вопросов. Поскольку вы имеете опыт работы с JavaScript, я настоятельно рекомендую вам ознакомиться с документацией, в ней есть все, что вам нужно. Прочитайте API, и я надеюсь, что вы теперь понимаете разницу между Content Script и Extension Pages, и связь между ними происходит через Extension Messaging.

 Exception28 дек. 2011 г., 16:10
@MohamedMansour Как вызвать функцию фоновой страницы, функцию сценария содержимого, функцию popup.html из информационной панели расширения Google Chrome.
 Volomike20 янв. 2011 г., 07:32
Спасибо! Ясность! :)
 Mohamed Mansour21 янв. 2011 г., 06:00
Вы не можете использовать chrome.tabs.sendRequest или getBackgroundPage из скрипта контента, вы должны использовать # 2 (обмен сообщениями) для настройки вашего слушателя на фоновой странице и передавать сообщения через chrome.extension.sendRequest. Если вам нужна дополнительная помощь, дайте мне знать :)
 Volomike20 янв. 2011 г., 10:27
Также можно заметить некоторые жуткие вещи, и, возможно, мой Chrome обновился в фоновом режиме или что-то в новой версии. Весь вчера я смог сделать AJAX-вызов своему локальному хосту без каких-либо ошибок через content.js. Сегодня - теперь есть междоменная ошибка, заставляющая меня использовать фоновый метод. Действительно полезный кусок кода здесь:src.chromium.org/viewvc/chrome/trunk/src/chrome/common/...
 Volomike20 янв. 2011 г., 10:23
Что-то также стоит отметить, если кто-то также использует jQuery. Вам нужно будет загрузить jQuery в background.html, иначе вы ничего не получите. Кроме того, я обнаружил, что мне не нужно делать chrome.tabs.sendRequest из моего запроса сценария содержимого background.html - я просто использовал № 2 выше, и это сработало.

Ваш ответ на вопрос