У меня есть расширение chrome, которое должно манипулировать содержимым открытой в данный момент страницы (вкладки).
Чтобы получить пользовательский ввод, я использую popup.html с несколькими полями ввода.Входные данные из этих полей передаются на страницу (скрипт контента), которая выполняет желаемое преобразование.
Проблема в том, что я не могу запустить функцию, которую я определяю в скрипте контента.Я попытался определить функцию в файле content_script.js и попытался вставить ее на страницу через
var new_script2 = document.createElement('script');
code = "function definition goes here";
new_script2.text = code;
document.getElementsByTagName('head')[0].appendChild(new_script2);
. Ничего не работает.Кроме того, я также не могу видеть объекты jQuery в content_script.js, даже если я вставляю их в манифест в соответствии с предложением здесь
Любые идеи, как запустить пользовательскую функцию на открытой вкладке в расширении Chromeпосле того, как событие было сгенерировано во всплывающем окне ???
[ОБНОВЛЕНИЕ]
Ниже приведено то, что у меня есть, и я решил свою проблему, ключ должен быть осторожен с передачей сообщений и инициализацией функций.
Мой манифест выглядит следующим образом
{
"background_page": "background.html",
"name": "some",
"version": "0.1",
"description": "some",
"browser_action": {
"default_icon": "icon.png",
"default_title": "some",
"popup": "popup.html"
},
"content_scripts": [ {
"js": [ "javascripts/jquery-1.5.min.js", "javascripts/jquerylatest.js", "javascripts/content_script.js" ],
"matches": [ "http://*/*", "https://*/*", "file://*/*" ],
"run_at": "document_end"
} ],
"permissions": [ "tabs", "http://*/", "https://*/" ]
}
В popup.html я создаю кнопку и назначаю обработчик событий, который отправляет сообщения на backgroundpage.html
$( "#create-user" )
.button()
.click(function() {
//~ alert(allFields.val());
//~ var annot = [attrValue, attrType];
chrome.tabs.getSelected(null, function(tab) {
chrome.tabs.sendRequest(tab.id, {"attrValue" : attrValue.val(), "attrType" : attrType.val()},
function readResponse() { console.log("got response in popup");} );
window.close();
});
});
На фоновой странице я слушаю сообщения, отправленные всплывающим
var tab_id = -1;
chrome.tabs.getSelected(null, function(tab) {
tab_id = tab.id;
});
chrome.extension.onRequest.addListener(function(request, sender) {
console.log("in bg.js addlistener method " + request);
chrome.tabs.executeScript(tab_id, {file:"javascripts/content_script.js"});
});
, и перенаправляет их далее в скрипт содержимого, чтобы использовать для модификации страницы.content_script прослушивает следующее:
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
//do your manipulation here
});
Наконец, не забудьте включить библиотеки jquery в javascripts / подпапку вашего расширения.