Могу ли я использовать внешний массив для сопоставления URL-адресов для внедрения скрипта контента?

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

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

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


person Shane_IL    schedule 02.01.2017    source источник
comment
Вы можете создать массив и заполнить его с помощью AJAX. Затем использовать это имя массива в свойстве «matches»?   -  person Souvik Ghosh    schedule 02.01.2017
comment
Хорошо, где я могу запустить вызов AJAX?   -  person Shane_IL    schedule 02.01.2017
comment
Можете ли вы показать полную функцию, которая у вас есть? Вы можете создать список URL-адресов в том же JS-файле в виде массива строк и использовать его. Нужно попробовать это.   -  person Souvik Ghosh    schedule 02.01.2017
comment
Дело не в этом, я знаю, как получить массив с сервера, но как связать его со свойством match в манифесте расширения?   -  person Shane_IL    schedule 02.01.2017


Ответы (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"});
        });
    }
});
person Iván Nokonoko    schedule 02.01.2017