2009-12-12 7 views
32

Ich möchte eine Erweiterung erstellen, die den Benutzer auf eine andere Website umleitet, wenn er auf die Erweiterungsschaltfläche klickt. Bisher habe ich nur Erweiterungen gesehen, die für jeden Klick eine neue Registerkarte erstellen.So ändern Sie den aktuellen URL-Speicherort in Chrome über Erweiterungen

Ist es möglich, den Benutzer über die aktive Registerkarte auf eine andere Website umzuleiten?

Ich habe versucht, so etwas wie diese:

chrome.browserAction.onClicked.addListener(function(tab) { 
    var url = "https://www.mipanga.com/Content/Submit?url=" 
     + encodeURIComponent(tab.url) 
     + "&title=" + encodeURIComponent(tab.title); 

    document.location.href = url; // <-- this does not work 
}); 

Antwort

52

Von dem chrome.tabs API, Sie getCurrent() oder query() verwenden können.

Ich bevorzuge getCurrent, aber es kann nicht von einem Nicht-Tab-Kontext (z. B. eine Hintergrundseite oder Popup-Ansicht) aufgerufen werden. Wenn dies ein Problem für Sie ist, sollten Sie stattdessen query verwenden. Jean-Marc Amons answer unten bietet ein wunderbares Beispiel dafür, wie man den aktiven Tab in diesem Fall bekommt (vergiss nicht ihn zu upvoten!).

Sobald Sie die aktuelle Registerkarte haben, übergeben Sie einfach update().

chrome.tabs.getCurrent(function (tab) { 
    //Your code below... 
    var tabUrl = encodeURIComponent(tab.url); 
    var tabTitle = encodeURIComponent(tab.title); 
    var myNewUrl = "https://www.mipanga.com/Content/Submit?url=" + tabUrl + "&title=" + tabTitle; 

    //Update the url here. 
    chrome.tabs.update(tab.id, {url: myNewUrl}); 
}); 

NB: Um diese diese Funktion zu nutzen, Sie müssen sicherstellen, dass Sie die tabs Erlaubnis in Ihrem manifest.json Datei aktiviert haben: kann

"permissions": [ 
    "tabs" 
], 
+1

können wir diesen Code in unseren externen js Include-Datei? oder muss es auf der chrome popup.html sein? Vielen Dank! –

+0

@Toni - Ja, es kann von einer externen Datei aufgerufen werden. –

+0

Funktioniert bei mir nicht im neuesten Chrome (19). –

25

Sie verwenden chrome.tabs. Abfrage auch

chrome.tabs.query({currentWindow: true, active: true}, function (tab) { 
     chrome.tabs.update(tab.id, {url: your_new_url}); 
}); 
+1

Dies ist der neue richtige Weg. – kube

+3

Dies sollte die akzeptierte Antwort sein.'getSelected' wurde veraltet – Gibolt

+1

@ Jean-Marc Amon 'tab' param ist eigentlich ein Array-Typ, so sollte es' tabs [0] .id' – artificis

3

Die chrome.tabs.update Methode (mindestens ab Januar 2017) wird automatisch auf dem aktuellen aktiven Tab ausgeführt, wenn anstelle einer ID undefined übergeben wird.

Dies hat den zusätzlichen Vorteil, dass die Berechtigung tabs nicht erforderlich ist. Erweiterungen mit dieser Berechtigung warnen den Benutzer, dass er den Browserverlauf lesen kann. Sie sollten daher vermeiden, danach zu fragen, wenn Sie dies nicht möchten.

der aktuellen Registerkarte URL zu ändern, ist so einfach wie das Schreiben dieses:

chrome.tabs.update(undefined, {url: 'http://example.com'}); 
+0

Werke. Danke! –

+0

können Sie diesen Code verwenden, um der aktuellen URL eine Zeichenfolge hinzuzufügen? dh. füge '& sandbox = true' zur aktuellen URL hinzu? –

+0

@ scott.schaffer Ich denke, du brauchst die 'Tabs'-Berechtigung dafür, da du die aktuelle URL der Registerkarte abrufen musst, bevor du sie hinzufügst. –

Verwandte Themen