google-chrome-extension
Innehållsskript
Sök…
Anmärkningar
Deklarerar innehållsskript i manifestet
Innehållsskript kan förklaras i manifest.json
att alltid injiceras på sidor som matchar en uppsättning URL-mönster .
Minimalt exempel
"content_scripts" : [
{
"js": ["content.js"],
"css": ["content.css"]
"matches": ["http://example.com/*"]
}
]
Den här manifestposten instruerar Chrome att injicera ett innehållsskript content.js
, tillsammans med CSS-filen content.css
, efter någon navigering till en sida som matchar matchningsmönstret http://example.com/*
Både js
och css
nycklar är valfria: du kan bara ha en av dem eller båda beroende på vad du behöver.
content_scripts
nyckeln är en matris och du kan förklara flera innehållsskriptdefinitioner:
"content_scripts" : [
{
"js": ["content.js"],
"matches": ["http://*.example.com/*"]
},
{
"js": ["something_else.js"],
"matches": ["http://*.example.org/*"]
}
]
Observera att både js
och matches
är matriser, även om du bara har en post.
Fler alternativ finns i den officiella dokumentationen och andra exempel.
Viktig notering
Innehållsskript som deklarerats i manifestet kommer endast att injiceras vid nya navigeringar efter tilläggsbelastningen . De kommer inte att injiceras i befintliga flikar. Detta gäller även för tilläggsladdningar vid utveckling, och tilläggsuppdateringar efter utgåvan.
Om du måste se till att nu öppnade flikar täcks, överväg också att göra programmatisk injektion vid start.
Injicera innehållsskript från en tilläggssida
Om du istället för att alltid ha ett innehållsskript injicerat baserat på URL: n, du direkt vill kontrollera när ett innehållsskript injiceras, kan du använda Programmatic Injection .
Minimalt exempel
JavaScript
chrome.tabs.executeScript({file: "content.js"});
CSS
chrome.tabs.insertCSS({file: "content.css"});
Kallas från en förlängningssida (t.ex. bakgrund eller popup) och antar att du har behörighet att injicera, kommer detta att köra content.js
eller infoga content.css
som ett innehållsskript i den översta ramen på den aktuella fliken.
Inline-kod
Du kan köra inline-kod istället för en fil som ett innehållsskript:
var code = "console.log('This code will execute as a content script');";
chrome.tabs.executeScript({code: code});
Att välja fliken
Du kan ange ett flik-ID (vanligtvis från andra chrome.tabs
metoder eller meddelanden) för att köra på en annan flik än den nuvarande aktiva.
chrome.tabs.executeScript({
tabId: tabId,
file: "content.js"
});
Fler alternativ finns i chrome.tabs.executeScript()
och i andra exempel.
Behörigheter
Att använda chrome.tabs.executeScript()
kräver inte "tabs"
-tillstånd, men kräver värdbehörigheter för sidans URL.
Kontrollerar för fel
Om manusinjektion misslyckas kan man fånga den i valfritt återuppringning:
chrome.tabs.executeScript({file: "content.js"}, function() {
if(chrome.runtime.lastError) {
console.error("Script injection failed: " + chrome.runtime.lastError.message);
}
});
Flera innehållsskript i manifestet
Samma villkor, flera skript
Om du behöver injicera flera filer där alla andra villkor är desamma, till exempel för att inkludera ett bibliotek, kan du lista alla dem i "js"
:
"content_scripts" : [
{
"js": ["library.js", "content.js"],
"matches": ["http://*.example.com/*"]
}
]
Beställningsfrågor: library.js
kommer att content.js
innan content.js
.
Samma skript, flera webbplatser
Om du behöver injicera samma filer på flera webbplatser kan du ange flera matchningsmönster:
"matches": ["http://example.com/*", "http://example.org/*"]
Om du behöver injicera i princip varje sida kan du använda breda matchningsmönster som "*://*/*"
(matchar varje HTTP (S) -sida) eller "<all_urls>"
(matchar varje sida som stöds ).
Olika skript eller olika webbplatser
"content_scripts"
-avsnittet är också en matris, så man kan definiera mer än ett innehållsskriptblock:
"content_scripts" : [
{
"js": ["content.js"],
"matches": ["http://*.example.com/*"]
},
{
"js": ["something_else.js"],
"matches": ["http://*.example.org/*"]
}
]