Opis
Użyj interfejsu chrome.scripting API, aby wykonać skrypt w różnych kontekstach.
Uprawnienia
scriptingDostępność
Plik manifestu
Aby używać interfejsu browser.scripting API, zadeklaruj uprawnienie "scripting" w manifeście oraz uprawnienia hosta dla stron, na których mają być wstrzykiwane skrypty. Użyj klawisza "host_permissions" lub uprawnienia "activeTab", które przyznaje tymczasowe uprawnienia hosta. W tym przykładzie użyto uprawnienia activeTab.
{
"name": "Scripting Extension",
"manifest_version": 3,
"permissions": ["scripting", "activeTab"],
...
}
Pojęcia i zastosowanie
Za pomocą interfejsu browser.scripting API możesz wstrzykiwać JavaScript i CSS do witryn. Działa to podobnie jak w przypadku skryptów treści. Jednak dzięki przestrzeni nazw browser.scripting rozszerzenia mogą podejmować decyzje w czasie działania.
Cele wstrzyknięcia
Za pomocą parametru target możesz określić środowisko docelowe, do którego ma zostać wstrzyknięty kod JavaScript lub CSS.
Jedynym wymaganym polem jest tabId. Domyślnie wstrzykiwanie będzie wykonywane w głównej ramce określonej karty.
function getTabId() { ... }
browser.scripting
.executeScript({
target : {tabId : getTabId()},
files : [ "script.js" ],
})
.then(() => console.log("script injected"));
Aby wyświetlać reklamy we wszystkich ramkach na określonej karcie, możesz ustawić wartość allFrames boolean
na true.
function getTabId() { ... }
browser.scripting
.executeScript({
target : {tabId : getTabId(), allFrames : true},
files : [ "script.js" ],
})
.then(() => console.log("script injected in all frames"));
Możesz też wstrzykiwać kod do konkretnych ramek karty, podając poszczególne identyfikatory ramek. Więcej informacji o identyfikatorach ramek znajdziesz w browser.webNavigationinterfejsie API.
function getTabId() { ... }
browser.scripting
.executeScript({
target : {tabId : getTabId(), frameIds : [ frameId1, frameId2 ]},
files : [ "script.js" ],
})
.then(() => console.log("script injected on target frames"));
Wstrzyknięty kod
Rozszerzenia mogą określać kod do wstrzyknięcia za pomocą pliku zewnętrznego lub zmiennej środowiska wykonawczego.
Pliki
Pliki są określane jako ciągi znaków, które są ścieżkami względnymi do katalogu głównego rozszerzenia. Poniższy kod wstrzyknie plik script.js do głównej ramki karty.
function getTabId() { ... }
browser.scripting
.executeScript({
target : {tabId : getTabId()},
files : [ "script.js" ],
})
.then(() => console.log("injected script file"));
Funkcje środowiska wykonawczego
Wstawiając kod JavaScript za pomocą scripting.executeScript(), możesz określić funkcję, która ma być wykonywana zamiast pliku. Ta funkcja powinna być zmienną funkcji dostępną w bieżącym kontekście rozszerzenia.
function getTabId() { ... }
function getTitle() { return document.title; }
browser.scripting
.executeScript({
target : {tabId : getTabId()},
func : getTitle,
})
.then(() => console.log("injected a function"));
function getTabId() { ... }
function getUserColor() { ... }
function changeBackgroundColor()