0

Ich entwickle gerade eine Chrome-Erweiterung. Es erfüllt seinen Zweck, aber das Problem ist, dass das Inhaltsskript automatisch ausgeführt wird, wenn ich einen neuen Tab öffne und eine Site besuche. Das Problem ist, dass es eine Warnung im Inhaltsskript & gibt, die beginnt, nervig zu werden, wenn die Warnung beim Besuch jeder neuen Website ausgelöst wird.Inhaltsskript wird automatisch geladen

Derzeit trigger ich das Inhaltsskript aus meinem Hintergrundskript mithilfe der chrome.tabs.executeScript-API. Ich habe jedoch bemerkt, dass der Code im Inhaltsskript automatisch ausgeführt wird, wenn ich einen neuen Tab & öffne, um eine neue Site zu öffnen, selbst wenn die Kriterien dafür nicht im Hintergrundskript erfüllt wurden.

Ist das das normale Verhalten? Sollen alle Chrome-Erweiterungen funktionieren? Wenn ja, gibt es einen Weg dies zu verhindern? Für den Moment habe ich mein Inhaltsskript als Hintergrundskript deklariert, aber ich möchte immer noch eine Lösung dafür finden.

Hier ist mein Manifest - manifest.json:

"content_scripts" : [ 
{ 
    "matches" : [ "<all_urls>"], 
    "js": ["raisealert.js"] 
} 
], 


"background": { 
    "scripts": ["background.js"], 
    "persistent": false 
}, 

Hier ist der Hintergrund Skript - background.js:

if(condition met) 
    chrome.tabs.executeScript(null, { 
    code: 'var config = ' + JSON.stringify(config) 
    }, function() { 
     chrome.tabs.executeScript(null, {file: 'raisealert.js'}, function() { 
      console.log("Alarm triggered"); 
     }); 
    }); 

Und hier ist das Skript Inhalt - raisealert.js

alert("sample alert raised"); 
+2

Nicht in Manifest deklarieren. Wie Sie in der Dokumentation sehen können, wird das Skript automatisch geladen. – wOxxOm

+0

Ahhhh .... Vielen Dank. Weiß nicht, warum ich diesen Teil der Dokumentation vermisste. Ich dachte, es sei zwingend notwendig, jedes Skript in der Erweiterung im Manifest zu deklarieren. Wenn Sie Ihren Kommentar als Antwort geben, werde ich es akzeptieren. Danke @wOxxOm – Piyush

Antwort

0

Sie können ein content_script automatisch und ohne Programmieraufwand laden, indem Sie es aufrufen im Abschnitt content_scripts des Manifests.

Sie können dies für alle URLs tun, oder Sie können ziemlich feinkörnig URL-Muster definieren, die das Skript geladen werden sollte. Siehe Manifest Injektion

Wenn Sie das Skript bedingt auf anderen Kriterien als nur die URL injizieren wollen, dann können Sie programmatic injection verwenden - das auf Kriterien beruhen könnte, wie der Inhalt der Seite oder ob jemand klickt auf die Browser Aktionstaste oder Wählt einen Kontextmenü-Kontextmenübefehl aus, den Sie definiert haben.

Programmatische Einspritzung verwendet häufig die chrome.tabs.onupdated Hörer für bestimmte URLs oder Inhalte zu prüfen und dann injizieren oder nicht.

Wenn Ihre Erweiterung ist etwas, das potenziell jeder auf jeder Seite verwenden möchten, dann ist es normalerweise am besten, es basierend auf einer absichtlichen Handlung durch den Benutzer, z. In Ihrem Fall, wie Sie sagen, ist es ärgerlich (Untertreibung), auf jedem Tab und jeder Seite, die geladen wird, eine Warnung zu erhalten.

Selbst wenn Ihr Skript keine sichtbaren Belästigungen hat, mit automatisch jeder Seite lädt in ist selten eine gute Idee, wenn es in der Nähe von Null Auswirkungen auf der Seite hat.

Wenn es entworfen ist auf eine bestimmte Website zu arbeiten, dann mit einem geeigneten URL-Muster-Filter über das Manifest Injektion ist oft am besten.

Verwandte Themen