Frage

Ich möchte eine Erweiterung erstellen, die den Benutzer auf eine andere Website weiterleitet, wenn er auf die Erweiterungsschaltfläche klickt. Bisher habe ich nur Erweiterungen gesehen, die für jeden Klick eine neue Registerkarte erstellen.

Ist es möglich, den Benutzer mithilfe der aktiven Registerkarte aktiver auf eine andere Website umzuleiten?

Ich habe so etwas ausprobiert:

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
});
War es hilfreich?

Lösung

Aufmerksamkeit: Wenn Sie Cross-Browser-Erweiterungen entwickeln (ich hoffe, Sie tun es!), Empfehle ich, dass Sie verwenden chrome.tabs.query(). Bitte sehen Sie Jean-Marc Amons Antwort für mehr Informationen. Diese Antwort funktioniert immer noch sowohl in Firefox als auch in Chrom, aber query() wird häufiger verwendet, hat mehr Optionen und funktioniert in Hintergrundseiten und Popup -Ansichten.

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

ich bevorzuge getCurrent Es kann jedoch nicht aus einem Nicht-TAB-Kontext aufgerufen werden (z. B. eine Hintergrundseite oder eine Popup-Ansicht). Wenn dies ein Problem für Sie ist, sollten Sie versuchen zu verwenden query stattdessen. Jean-Marc Amon Antworten Im Folgenden ist ein wunderbares Beispiel dafür, wie Sie in diesem Fall die aktive Registerkarte erhalten (vergessen Sie nicht, ihn zu verbessern!).

Sobald Sie die aktuelle Registerkarte haben, passieren 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 Funktionalität zu verwenden, sind Sie muss Stellen Sie sicher, dass Sie das haben tabs Erlaubnis in Ihrem aktiviert manifest.json Datei:

"permissions": [
  "tabs"
],

Andere Tipps

Sie können auch Chrome.tabs.Query verwenden

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

Das chrome.tabs.update Die Methode (zumindest ab Januar 2017) wird automatisch auf der aktuellen aktiven Registerkarte "TAB -ID" ausgeführt.

Dies hat den zusätzlichen Vorteil, das nicht zu verlangen tabs Genehmigung. Erweiterungen mit dieser Erlaubnis warnen dem Benutzer, dass er den Browserhistorium lesen kann. Sie sollten also vermeiden, dass Sie danach fragen, ob Sie nicht müssen.

Das Ändern der URL der aktuellen Registerkarte ist so einfach wie das Schreiben:

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

Oder wie in den Kommentaren von Farwayer erwähnt wird, müssen Sie überhaupt nicht zwei Argumente vorlegen.

chrome.tabs.update({url: 'http://example.com'});
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top