Google Chrome-Erweiterungen - Öffnen Sie den neuen Tab, wenn Sie auf ein Symbolleistensymbol klicken

72

Wie kann ich eine Erweiterung für Chrome erstellen, die der Symbolleiste ein Symbol hinzufügt, und wenn Sie darauf klicken, wird eine neue Registerkarte mit einer lokalen Webseite geöffnet (z. B. f.html)?

Ich habe diese Frage gesehen , aber sie erklärt nicht wirklich, was ich in die Manifestdatei einfügen soll ...

Alon Gubkin
quelle

Antworten:

98

Dies gilt nicht für neuere Chrome-Apps.

Bei neueren Chrome-Apps mit manifest_version: 2 müssen die Registerkarten wie folgt geöffnet werden:


chrome.browserAction.onClicked.addListener(function(activeTab)
{
    var newURL = "http://www.youtube.com/watch?v=oHg5SJYRHA0";
    chrome.tabs.create({ url: newURL });
});

Abhishek Mehta
quelle
Dies ist die bessere, aktuellere und genauere Antwort, FYI
Zack Shapiro
5
@DehanWjiesekara Setzen Sie es in zB background.js und haben Sie "background": { "scripts": [ "background.js" ] }in Ihrem Manifest.
Simonp
wird tabs.createausgelöst, wenn in onInstalled im Zusammenhang mit dem Laden einer entpackten Erweiterung verwendet wird, die im Grunde nur eine lokale index.html und eine background.js enthält, die die index.html derzeit nur in einem neuen Tab öffnet? Aus irgendeinem Grund, der momentan nicht für mich funktioniert, muss etwas Einfaches fehlen.
Stephen Tetreault
Beachten Sie jedoch, dass die Verwendung einer "Tabs" -Berechtigung dem Benutzer bei der Installation eine Warnung anzeigt, dass die Chrome-Erweiterung "Ihren Browserverlauf lesen" muss. Wenn Sie jedoch nur einen neuen Tab öffnen möchten, verwenden Sie stattdessen einfach die "activeTab" -Berechtigung. Diese Warnung wird nicht ausgelöst.
Mahmoud Felfel
Du musstest das tun, nicht wahr?
Mukund
53

Nun, in den Erweiterungsdokumenten heißt es im Manifest , dass Sie "Tabs" als Berechtigung einfügen müssten. Genauso wie sie die Hallo-Welt-Anwendung erklären:

Manifestdatei:

{
  "name": "My Extension",
  "version": "1.0",
  "description": "Opens up a local webpage",
  "icons": { "128": "icon_128.png" },
  "background_page": "bg.html",
  "browser_action": {
    "default_title": "",
    "default_icon": "icon_19.png"
  },
  "permissions": [
    "tabs"
  ],
}

Auf der Hintergrundseite hören Sie das Mausklickereignis in der Browseraktion.

chrome.browserAction.onClicked.addListener(function(tab) {
  chrome.tabs.create({'url': chrome.extension.getURL('f.html')}, function(tab) {
    // Tab opened.
  });
});

Wie Sie oben bemerkt haben, werden Sie sehen, dass ich die Frage verwendet habe, die Sie in dem anderen Beitrag gesehen haben. Beachten Sie, dass dies nicht getestet wurde, aber ich glaube, dass es funktionieren sollte.

Mohamed Mansour
quelle
1
Beachten Sie, dass beim Hinzufügen von "Tabs" -Berechtigungen dem Benutzer bei der Installation die Berechtigungswarnung "Browserverlauf lesen" angezeigt wird. Die Dokumente sagen, dass die meisten chrome.tabsdiese Berechtigung nicht benötigen. Developer.chrome.com/extensions/tabs Da ich dies nicht genau beachtet habe, habe ich kürzlich Hunderte von Benutzern von chrome.google.com/webstore/detail/inbox- verloren. by-gmail-checker /…
Joe
6

chrome.tabs.create benötigen die Berechtigung "tabs".

Verwenden Sie einfach die Erweiterung window.open ohne Erlaubnis. und der Code ist kürzer. Ich schlage diese Lösung vor.

window.open(url,'_blank');
cuixiping
quelle
Ich habe den gleichen Code in meiner Erweiterung verwendet, um beim Klicken auf die Benachrichtigungsschaltfläche einen neuen Tab zu öffnen. aber jetzt nach 3 Monaten bekomme ich aw..snap Seitenfehler, wenn ich auf diese Schaltfläche klicke. Hast du eine Idee, warum das passiert ist? Ps: Es funktioniert gut, wenn ich eine andere URL wie www.google.com verwende, aber es funktioniert nicht mit meiner Website.
Sona
Dies scheint für mich zu funktionieren (obwohl ich es nur in einer lokalen entbündelten Erweiterung versucht habe, an der ich arbeite).
Simonp