Как запустить пользовательскую функцию на открытой вкладке в Chrome Extension с помощью jQuery - PullRequest
5 голосов
/ 21 апреля 2011

У меня есть расширение 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 / подпапку вашего расширения.

1 Ответ

1 голос
/ 21 апреля 2011

Насколько я понимаю, встроенные функции Javascript не сохраняются, если они не присоединены к событию (например, keypress или onclick).(кто-то, пожалуйста, поправьте меня, если я ошибаюсь!)

Вместо этого я бы предложил использовать chrome.tabs.executeScript(tabId, details) и записать код в details.code, или код должен бытьв другом файле сценария содержимого .js через details.file, который вы можете вставить.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...