2017-12-16 3 views
0

Ich möchte, dass die Erweiterung HTML in einer neuen Registerkarte und nicht in einem Popup geöffnet wird. Eine vorhandene Erweiterung, Session Buddy, hat genau das Verhalten, das ich replizieren möchte.Öffnen der Chrome-Erweiterung in der neuen Registerkarte, wenn auf das Symbol in der Symbolleiste geklickt wird

Das Problem ist, dass Chrome neue Erweiterungsregisterkarten nonstop öffnet, nachdem ich auf das Symbolleistensymbol geklickt habe, wenn das gewünschte Verhalten (offensichtlich) nur eine Registerkarte geöffnet hat. Seltsamerweise kann ich nur einen Tab öffnen, wenn ich eine "Web-URL" wie https://stackoverflow.com/ verwende.

manifest.json:

{ 
    "manifest_version": 2, 
    "name": "angular chrome extension boilerplate", 
    "version": "1.0.0", 
    "background": { 
     "scripts": ["background.js"], 
     "persistent": true 
    }, 
    "permissions": [ 
     "activeTab", 
     "tabs", 
     "background" 
    ], 
    "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'" 
} 

background.js:

chrome.tabs.create({ url: chrome.extension.getURL('index.html') }); 

Mehrere Beiträge auf dieser Website eine ähnliche Frage, aber keine der vorgeschlagenen Lösungen für mich gearbeitet:

+1

Legen Sie es in einem Klick-Listener für das Symbol: [Probe] (https: // Entwickler. chrome.com/extensions/examples/api/browserAction/make_page_red/background.js). – wOxxOm

+0

Die Registerkarte öffnet sich nicht, wenn ich 'chrome.tabs.create()' in einen Klick-Listener setze. – GreatHam

+1

Es ist Zeit, [das Hintergrundskript zu debuggen] (https://stackoverflow.com/a/10258029)! – wOxxOm

Antwort

1

Es stellt sich heraus, dass der richtige Weg, eine Registerkarte, um die Symbolleiste zu öffnen, zu erhalten nach dem Klicken auf den Anruf zu chrome.tabs.create() in einem onClicked Zuhörer wickeln:

background.js überarbeitet:

chrome.browserAction.onClicked.addListener(function(tab) { 
    chrome.tabs.create({ url: chrome.extension.getURL('index.html'), selected: true }); 
}); 

Anfangs wird dies nicht funktionieren, da chrome.browserAction.onClickedundefined ist. Um dies zu lösen, one needs to add an empty "browser_action" object to manifest.json. Auch der bisher verwendete persistente Hintergrund und activeTab Erlaubnis ist nicht notwendig und kann entfernt werden:

manifest.json überarbeitet:

{ 
    "manifest_version": 2, 
    "name": "angular chrome extension boilerplate", 
    "version": "1.0.0", 
    "browser_action": { }, 
    "background": { 
     "scripts": ["background.js"], 
     "persistent": false 
    }, 
    "permissions": [ 
     "tabs", 
     "background" 
    ], 
    "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'" 
} 
Verwandte Themen