0

Я создаю расширение chrome, которое имеет фон, который запускается каждую секунду и обновляет chrome.storage ... и он называется artistSetter.js. Вот оно:Расширение Chrome: интервал фоновой страницы работает, но не видит плагин jQuery

chrome.storage.local.get(function(items){ 
    $.each($('#supplySong > a > span.sidebar-heading'), function(){ 
     if ($(this).css('background-color') == 'rgb(22, 156, 217)'){ 
      chrome.storage.local.set({"currentArtist": $(this)[0].innerText}); 
     } 
    }); 
}); 

Справочная страница это:

setInterval(function() { 
    chrome.tabs.executeScript(null, {file: 'js/artistSetter.js'}); 
}, 1000); 

Ошибка заключается в следующем:

Error in response to storage.get: ReferenceError: $ is not defined

Дело в том, что это работает после обновления страницы. Я понимаю, что это работает, потому что я начинаю работать jQuery.js. Но когда я нажимаю кнопку Reload, она перестает работать, и я начинаю получать ошибку каждую секунду. Опять же, после обновления, он работает. Потому что jQuery.js начинает работать.

Как это исправить? На самом деле не удалось найти способ.

ответ

1

Добавьте требуемый плагин перед запуском artistSetter.js, например .:

setInterval(function() { 
    chrome.tabs.executeScript(null, {file: 'jquery.js'}); 
    chrome.tabs.executeScript(null, {file: 'js/artistSetter.js'}); 
}, 1000); 
+0

Работал. Должна догадаться. Большое спасибо! –

+0

Похоже, этот вариант не будет работать, потому что другие страницы по-настоящему сумасшедшие. Спасибо, в любом случае. Лучшим вариантом было бы, вероятно, изменить его из манифеста, но не знаю, как это сделать. –

1

Почему бы не поставить setInterval логики сценариев содержания, только держать artistSetter.js и удалить фоновые страницы?

manifest.json

"content_scripts": [ 
    { 
     "matches": [ 
     "*://*/*" 
     ], 
     "js": [ 
     "jquery.js", 
     "artistSetter.js" 
     ], 
     "run_at": "document_end", 
     "all_frames": true 
    } 
    ], 

artistSetter.js

setInterval(function() { 
    chrome.storage.local.get(function(items){ 
     $.each($('#supplySong > a > span.sidebar-heading'), function(){ 
      if ($(this).css('background-color') == 'rgb(22, 156, 217)'){ 
       chrome.storage.local.set({"currentArtist": $(this)[0].innerText}); 
      } 
     }); 
    }); 
}, 1000); 
+0

Все еще не распознает ( –

0

В качестве другого решения, Вы можете объединить два файла сценария в один файл с некоторым инструментом (напр. grunt-contrib-concat).