0

Я пытаюсь изменить код sample code Google для инъекций кода. Файл manifest.json включает справочный сценарий:Как получить переменные из сценариев контента в расширении Chrome?

"background": { 
    "scripts": ["background.js"], 
    "persistent": false 
    }, 

и я добавить content script:

"content_scripts": [ 
    { 
     "matches": ["*://*/*"], 
     "js": ["filter.js"] 
    } 
    ], 

Теперь я хочу, чтобы вызвать функцию, определенную в foo()filter.js, когда пользователь нажимает кнопку внутреннего абонента. Я делаю это в background.js:

chrome.browserAction.onClicked.addListener(function(tab) { 
    chrome.tabs.executeScript({ 
    code: 'foo(testText);' 
    }); 
}); 

где foo() определяется в filter.js, как

function foo(test) { 
    alert('Test: ' + String(test)); 
} 
var testText = 'foo'; 

Я могу выполнить функцию, но не может передать переменную testText. Я получаю VM3181:1 Uncaught ReferenceError: testText is not defined.

Я знаю, что неправильно ссылаюсь на переменную, но как это сделать правильно?

ответ

1

Взгляните на sendMessage и onMessage примеров перенастроенных от Google:

В background.js:

chrome.browserAction.onClicked.addListener(function(tab) { 
    chrome.tabs.sendMessage(tab.id, {greeting: "foo"}, function(response) { 
     console.log(response.farewell); 
    }); 
}); 

И в filter.js:

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) { 
     if (request.greeting == "foo") { 
      //your Foo function can be called 
      sendResponse({farewell: "bar"}); 
     } 
}); 
Смежные вопросы