2013-06-09 9 views
9

Grundsätzlich versuche ich eine kleine Chrome-Erweiterung nach Google-Dokumentation zu tun. Ich möchte jedes Mal ein Skript einfügen, wenn auf die Erweiterungsschaltfläche geklickt wird. Das ist mein Manifest so weit:ExecuteScript-Methode

{ 
    "name": "Example", 
    "manifest_version": 2, 
    "version": "1.0", 
    "permissions": [ 
    "tabs" 
    ], 
    "description": "My Chrome extension.", 
    "browser_action": { 
    "default_icon": "icon.png" 
    }, 
    "background": { 
    "scripts": ["background.js"] 
    } 
} 

Und das ist mein background.js:

chrome.browserAction.onClicked.addListener(function(tab) { 
    chrome.tabs.executeScript(tab.id, {code: "content_script.js"}); 
}); 

Das Problem ist, dass die content_script nicht ausgelöst wird, auch mit einer solchen einfachen Versuch alert("aaa");

Können Sie mir bitte sagen, was ich falsch mache? Ich kann es nicht herausfinden.

Antwort

12

Um ein Inhaltsskript auf einer Seite auszuführen, müssen Sie die korrekten Hostberechtigungen in Ihrer Manifestdatei anfordern.

Da Sie ein Inhaltsskript beim Klicken auf einen Browser-Aktionsschaltfläche einfügen möchten, reicht es aus, die activeTab permission anzufordern. Außerdem können Sie die tabs Berechtigung löschen, um die Anzahl permission warnings auf Null zu reduzieren!

{ 
    "name": "Example", 
    "manifest_version": 2, 
    "version": "1.0", 
    "permissions": [ 
    "activeTab" 
    ], 
    "browser_action": { 
    "default_icon": "icon.png" 
    }, 
    "background": { 
    "scripts": ["background.js"] 
    } 
} 

(Die activeTab Erlaubnis introduced in Chrome 26 gewesen. Wenn Sie 25 Chrome unterstützen müssen und früher, fügen Sie die *://*/* oder <all_urls> Berechtigungen für die Manifest-Datei).

Hinweis: Wenn Sie einen Rückruf an chrome.tabs.executeScript hinzufügen, würden Sie eine nützliche Fehlermeldung in chrome.runtime.lastError.message erhalten:

nicht Inhalt der URL zugreifen können „http .....“ Extension Manifest fordern muss die Erlaubnis, Greife auf diesen Host zu.

chrome.browserAction.onClicked.addListener(function(tab) { 
    chrome.tabs.executeScript(tab.id, { 
     file: "content_script.js" 
    }, function() { 
     if (chrome.runtime.lastError) { 
      console.error(chrome.runtime.lastError.message); 
     } 
    }); 
}); 
+0

Ja verwendet werden, das den Trick machen und Ihnen auch für die Ausnahmebehandlung danken. Diese Antwort ist sehr erschöpfend. – fillobotto

+0

Ist die "content_script.js", die ich gestartet habe, nicht in der Lage, den aktuellen Tab-Inhalt zu bearbeiten? Es scheint nicht so. Zum Beispiel kann ich Textbox-Wert abrufen, aber nicht setzen. – fillobotto

+0

@fillobotto Sie sollten in der Lage sein, den Wert festzulegen. Kannst du zeigen, was du versuchst? –

6

Neben Robs Update sollte man {file: "content_script.js"}

+0

Gut gefleckt. Gegenwärtig wird 'content_scripts.js' als Code anstelle einer Datei angesehen, da' 'code' 'anstelle von' 'file' 'verwendet wurde - siehe [' chrome.tabs' # InjectDetails] (https://developer.chrome. com/extensions/tabs.html # type-InjectDetails) –