2017-01-02 3 views
2

Я работаю над расширением chrome, где я хотел бы добавить скрипт контента в список URL-адресов. Обычно я использовать обычный синтаксис:Могу ли я использовать внешний массив для сопоставления URL-адресов для инъекций скриптов контента?

{ 
    "name": "My extension", 
    ... 
    "content_scripts": [ 
    { 
     "matches": ["http://www.google.com/*"], 
     "css": ["mystyles.css"], 
     "js": ["jquery.js", "myscript.js"] 
    } 
    ], 
    ... 
} 

Но для моделей матча я хотел бы, чтобы вытащить массив с сервера. Есть ли способ программно установить массив «matches» (например, из файла background.js)?

+0

Вы можете создать массив и заполнить его с помощью AJAX. Затем используйте имя этого массива в свойстве «matches»? –

+0

Хорошо, где я запускаю вызов AJAX? –

+0

Можете ли вы показать полную функцию, которая у вас есть? Вы можете создать список URL-адресов в том же JS-файле, что и строковый массив, и использовать это может быть. Нужно попробовать. –

ответ

1

Насколько я знаю, вы не можете изменить свой файл manifest.json с внутренней стороны. Что вы можете сделать, это программно вставлять скрипты содержимого с фоновой страницы, когда URL-адрес вкладки соответствует одному из URL-адресов, полученных с сервера.

Обратите внимание, что вам потребуются tabs и <all_urls> разрешения.

background.js

var list_of_URLs; //you populate this array using AJAX, for instance. 

populate_list_of_URLs(); 

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab){ 
    if (list_of_URLs.indexOf(tab.url) != -1){ 
     chrome.tabs.executeScript(tabId,{file:"jquery.js"},function(){ 
      chrome.tabs.executeScript(tabId,{file:"myscript.js"}); 
     }); 
    } 
}); 
Смежные вопросы