Пожалуйста, объясните фоновую связь с расширениями Google Chrome - PullRequest
4 голосов
/ 20 января 2011

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

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

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

1 Ответ

17 голосов
/ 20 января 2011

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

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

  1. chrome.extension.getBackgroundPage ()

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

    var bkg = chrome.extension.getBackgroundPage();`  
    bkg.ping();`
    
  2. 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, которые запускаются в контексте веб-страниц, а не страниц расширения.Это важное различие, которое нужно распознать.

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

Если ваше расширение очень часто связывается с вашим скриптом контента, вы можете использовать соединения Long Lived, что довольно хорошо объясняется в разделе «Обмен сообщениями».понравилось выше.

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

...