Скажем, у меня есть функция:
var rand = function(n) {
return Math.floor(Math.random() * n);
}
Могу ли я использовать эту функцию как в содержании Script, так и в Background Script без copypaste?
Спасибо.
Скажем, у меня есть функция:
var rand = function(n) {
return Math.floor(Math.random() * n);
}
Могу ли я использовать эту функцию как в содержании Script, так и в Background Script без copypaste?
Спасибо.
Да. У вас может быть внешний JS файл, который загружается как часть фона и содержимого script (как любой обычный JS файл). Просто добавьте его в фоновый и контентный script массивы файлов в манифест, и он будет загружен для вас.
Например, если наша общая функция находится в sharedFunctions.js
, содержимое script с их использованием находится в mainContentScript.js
, а фоновый код в mainBackground.js
(все в подпапке js
), мы можем сделать что-то вроде этого в манифесте:
"background": {
"scripts": [ "js/sharedFunctions.js", "js/mainBackground.js" ]
},
"content_scripts": [
{
"matches": ["*://*/*"],
"js": ["js/sharedFunctions.js", "js/mainContentScript.js"]
}
]
Примечание. Обязательно загрузите его в правильном порядке, прежде чем использовать другие файлы.
Или вы также можете добавить его как тег script (с относительным URL) в background.html, а в манифесте добавить его только в массив содержимого script JS. Таким образом, манифест будет выглядеть так:
"background": {
"page": "background.html"
},
"content_scripts": [
{
"matches": ["*://*/*"],
"js": ["js/sharedFunctions.js", "js/mainContentScript.js"]
}
]
а файл background.html будет иметь этот тег script:
<script type="text/javascript" src="js/sharedFunctions.js"></script>
Изменить: Также, для совместного использования с другими областями в других частях расширения (к сожалению, недоступно в содержании script).
Вы также можете использовать функции, которые вы хотите использовать, в фоновом режиме script и использовать их через chrome.runtime.getBackgroundPage()
, о которых вы можете прочитать здесь:
https://developer.chrome.com/extensions/runtime#method-getBackgroundPage
Итак, скажем, у вас есть функция rand()
, объявленная как глобальная переменная в фоновом режиме script (что означает, что это свойство в объекте фонового окна), вы можете сделать что-то подобное в начале script в другой области (это может быть контекст всплывающего окна, такой как окно браузера):
var background, newRandomNumber;
chrome.runtime.getBackgroundPage(function(backgroundWindow){
background = backgroundWindow;
newRandomNumber = background.rand();
})
Таким образом вы также можете использовать переменную background
для доступа к любому свойству или методу, установленным в объекте фонового окна. Помните, что эта функция работает asynchrounusly, что означает, что только после вызова обратного вызова будут определены переменные background и newRandomNumber.
Да, вы можете, поместив его в отдельный JS файл и загрузив его в оба.
Скажем, у вас есть файл utils.js
, который содержит все такие функции.
Затем вы можете загрузить фоновый рисунок следующим образом:
"background": {
"scripts": [ "utils.js", "background.js" ]
},
И содержимое script выглядит следующим образом:
"content_scripts": [
{
"matches": ["..."],
"js": ["utils.js", "content.js"]
}
],
Или, если вы используете программную инъекцию, соедините вызовы следующим образом:
chrome.tabs.executeScript(tabId, {file: "utils.js"}, function(){
chrome.tabs.executeScript(tabId, {file: "content.js"}, yourActualCallback);
});