Расширение Chrome: создайте новую вкладку (chrome.tabs.create) и выполните сценарий в новой вкладке… не работает :(

В настоящее время я работаю над расширением Google Chrome, которое позволит пользователю Pinterest легко закреплять несколько изображений со страницы (функция, которая в настоящее время недоступна). Для этого в расширении есть фоновая страница и два сценария содержимого (contentScript1.js и contentScript2.js). Для ясности я объясню, что должно делать мое расширение, а затем уточню, какая проблема возникает. Мой (упрощенный) порядок событий в моем расширении выглядит следующим образом:

  1. Пользователь просматривает веб-страницы и решает, что хочет закрепить изображение с текущей вкладки, поэтому щелкает мой кнопка браузера расширения!
  2. При нажатии кнопки браузера файл background.js отправляет сообщение для contentScript1.js, чтобы сказать: «Эй, возьмите каждый тег img на этой странице и разрешите пользователю select ’em ”
  3. contentScript1.js получает сообщение от background.js, которое вызывает функцию, которая захватывает все изображения и добавляет кнопку отправки на страницу.
  4. пользователь щелкает нужные изображения, а затем нажимает кнопку отправки.
  5. При нажатии кнопки отправки contentScript1.js отправляет сообщение в background.js
  6. Когда background .js получает сообщение от contentScript1.js, перенаправляет пользователя на pinterest.com для закрепления. * Примечание: когда вкладка создается с URL-адресом pinterest.com, pinterest.com теперь является активной вкладкой (расширение chrome по умолчанию chrome.tabs.create),
  7. после background.js создает новую вкладку, она выполняет contentScript2.js на текущей вкладке, которая теперь называется pinterest.com

Хорошо, все работает отлично, за исключением того, что contentScript2.js выполняется в ЛЮБАЯ ТЕКУЩАЯ ВКЛАДКА. В частности, если я открою свой браузер прямо сейчас, моя функция тестера из contentScript2.js будет выполнена. Однако моя вкладка pinterest.com создается только в нужное время (при нажатии кнопки отправки). Насколько я понимаю, мне не нужно использовать передачу сообщений между background.js и contentScript2.js из-за настроек chrome.tabs.create по умолчанию. Тем не менее, я попытался использовать передачу сообщений, но это все равно не сработало ☹

Вот код:

  manifest.json: {"manifest_version"  : 2, "name": "Закрепить", "description": "Закрепить несколько изображений на разных досках Pinterest всего за два клика", "version": "1.1", "permissions": ["tabs", " "]," browser_action ": {" default_icon ":" images/icon.png "}," background ": {" page ":" background.html "," persistent ": false}," content_scripts ": [  {"соответствует": [""], "js": ["lib/jquery.min.js", "src/contentScript1.js", "src/contentScript2.js"], "css": [  "stylesheets/style.css"]}]}  

и фоновая страница:

  background. js//при нажатии значка браузера выбирается текущая вкладка//отправляет сообщение на contentScript1.js chrome.browserAction.onClicked.addListener (function () {chrome.tabs.getSelected (null, function (tab) {chrome.tabs.  sendMessage (tab.id, 'displayImages');});}); //при получении сообщения 'redirectImages'//создается новая вкладка (url = http://pinterest.com)//расширение выполняет contentScript2.js в pinterest.comchrome.extension.onMessage.addListener (function (request, sender  , sendResponse) {if (request.action === 'redirectImages') {sendResponse ({Received: 'success'}); injectScript ();}}); функция injectScript () {chrome.tabs.create ({url:  'http://pinterest.com'}, функция (вкладка) {chrome.tabs.executeScript (tab.id, {file: 'src/contentScript2'});});};  

первый сценарий содержимого:

  contentScript1.jsfunction sendMess () {chrome.extension.sendMessage ({action: 'redirectImages'}, function (response) {success  = response.received; console.log (success);});}; function appendImages () {//... делает что-то, чтобы сделать красивое наложение и//... захватывает теги img, и отображает их для выбора пользователем  для выбора//... добавляет кнопку отправки с class = 'submit-images'}; $ (document) .on ('click', '# submit-images', function (e) {//..творит волшебство  что ты ne  Эд не беспокойтесь о (я думаю?) sendMess ();}); chrome.extension.onMessage.addListener (function (request, sender, sendResponse) {if (request === "displayImages") {appendImages ();  }});   

второй сценарий содержимого

  contentScript2.js function tester () {console.log ('pinterest script injected');}  ; var tester = tester ();  

contentScript2.js выполняется в ЛЮБОЙ ТЕКУЩЕЙ ВКЛАДКЕ

Это потому, что в вашем манифесте вы включили его в свои content_scripts , которые загружаются на . Похоже, вы хотите программно решить, когда запускать скрипт, а именно для этого используется executeScript .

Просто удалите contentScript2. js из вашего манифеста, а executeScript выполнит внедрение, как вы ожидаете.

Оцените статью
Botgadget.ru
Добавить комментарий