Расширение Chrome: внедрение кода, который ссылается на сценарий, который я также внедряю - почему это не удается? - PullRequest
0 голосов
/ 28 ноября 2011

Я пытаюсь создать всплывающее окно jquery на любой странице, запускаемой по требованию, когда пользователь нажимает на мое расширение Chrome.

У меня есть права доступа, установленные на ["tabs", "http:///"," https:///"]

У меня есть фоновая страница, которая пытается сделать следующее:

chrome.browserAction.onClicked.addListener(function(tab) {

//chrome.tabs.executeScript(null, { code: "alert(document.title);" }, null);

chrome.tabs.executeScript(null, {file: "demo.js"}, null);

chrome.tabs.executeScript(null, { code: "document.body.appendChild(document.createElement('script')).src='demo.js'" }, null);
      });

Если я раскомментирую предупреждение, оно появляется, когда я нажимаю на значок расширения.Но с комментарием как таковым он ничего не делает.

Есть мысли, почему он не работает?

ОБНОВЛЕНИЕ Мне удалось заставить его работать, ссылаясь на URL, а не на локальный ресурс (demo.js).Теперь код, который работает, выглядит следующим образом:

chrome.tabs.executeScript(tab.id, { code: "document.body.appendChild(document.createElement('script')).src='http://iamnotagoodartist.com/stuff/wikiframe.js'" }, null); 

Мой локальный "demo.js" в любом случае был копией содержимого этого URL.Я не уверен, почему это не работает, когда я ссылаюсь на локальный файл ...?

Ответы [ 2 ]

0 голосов
/ 30 ноября 2011

Вы должны использовать chrome.extension.getURL , чтобы получить полный путь к файлу "demo.js".

chrome.tabs.executeScript(null, { 
  code: "document.body.appendChild(document.createElement('script')).src='" + 
    chrome.extension.getURL("demo.js") +"';" 
}, null);

Кстати, если вы установите для параметра tabId значение null, сценарий будет вставлен не на фоновую страницу, а в выбранную вкладку текущего окна .

0 голосов
/ 28 ноября 2011

Вы не передаете идентификатор tab в executeScript, поэтому сценарии внедряются в фоновую страницу, где вы не можете с ними взаимодействовать.

chrome.tabs.executeScript(tab, {file: "demo.js"}, null);

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