Связь между сценариями содержимого, фоновыми и всплывающими окнами

На стороне отправки: т.е. из contentscript.

contentscript.js:

<script> 
    //some DOM code to obtain values to store in 'marks' array.


    //here I'm sending marks array to background.js.
    // 1) Am I sending it right?
    chrome.runtime.sendMessage(marks);

</script>

На принимающей стороне: т.е. в фоновом сценарии.*

background.js:

chrome.runtime.onMessage.addListener(function(MessageSender sender, function     
    sendResponse){
     /* 2) what should be here */ });

3) здесь, как я могу собрать (сохранить) переменную массива, переданную из contentscript.

4) Теперь из background.js я могу напрямую вызывать любую функцию в popup.js (файл сценария
связан с popup.html).

Кто-нибудь может ответить на 4 вопроса?
Заранее спасибо!

Проверка моего всплывающего окна выдала следующую ошибку:

введите здесь описание изображения


person Nikhil    schedule 18.03.2014    source источник


Ответы (1)


в файле manifest.json

добавить разрешение на хранение

"permissions": ["storage"]

в contentscript.js

сохраните данные в локальном хранилище Google Chrome: Chrome Storage API

var data = ''; //set your data here
    chrome.storage.local.set({
         'myVariable': data
        });

используйте sendMessage для вызова фоновой страницы: API обмена сообщениями Chrome

 chrome.runtime.sendMessage({
     greeting: "myAction"
 });

в background.js

получить сообщение от contentscript.js

chrome.runtime.onMessage.addListener(
    function (request, sender, sendResponse) {
    if (request.greeting == "myAction") {
        collectData();
    }
 });

определить функцию collectData()

function collectData() {
  chrome.storage.local.get('myVariable', function (items) {
    console.log(items); //your data is on items.myVariable 
  });
}

для вызова функции popup.js из background.js используйте API обмена сообщениями

person Intuitisoft    schedule 18.03.2014
comment
Нам обязательно нужно хранить данные в локальном хранилище? Разве мы не можем сохранить его в переменной? - person Nikhil; 18.03.2014
comment
@Intutisoft Я внес предложенные изменения. Об ошибках не сообщалось. Но последний шаг, как я могу передать эту переменную в popup.js. Буду рад познакомиться, приятель. Спасибо. - person Nikhil; 18.03.2014
comment
с тем же принципом. вы получаете свои данные из хранилища в popup.js: chrome.storage.local.get('myVariable', function (items) { console.log(items); //ваши данные находятся в items.myVariable }); - person Intuitisoft; 18.03.2014
comment
@nikhil Вы не можете сохранить это в переменной. Ваша переменная область доступна только для вашей страницы. Невозможно получить доступ к этой переменной с другой страницы. Поэтому для связи с разными страницами используйте API локального хранилища или отправьте его в содержимом сообщения. - person Intuitisoft; 18.03.2014
comment
Спасибо @Intuitisoft за ваше время, я получаю указанную выше ошибку при доступе к элементу хранилища. Почему это так? - person Nikhil; 18.03.2014
comment
@nikhil изучите продвинутый JavaScript и API Google Chrome. chrome.storage.local.get('myVariable', function (items) {marks = items.myVariable}); если вы хотите, чтобы ваш скрипт работал правильно, используйте функцию обратного вызова для выполнения следующих операций. - person Intuitisoft; 18.03.2014