Chrome-Erweiterung: Wie öffne ich einen Link in einem neuen Tab?


78

In meinem Stackoverflow-Ordner habe ich stackoverflow.icound 2 unten stehende Dateien. Beim Importieren in Chrome wird das Symbol in der Adressleiste angezeigt. Wenn ich jedoch darauf klicke, öffnet Chrome keinen neuen Tab. Was mache ich falsch?

manifest.json

{
  "name": "Stackoverflow",
  "version": "1",
  "browser_action":
  {
    "default_icon": "stackoverflow.ico"
  },
  "background":
  {
    "page": "index.html"
  },
  "permissions": ["tabs"],
  "manifest_version": 2
}

index.html

<html>
  <head>
    <script>
      chrome.browserAction.onClicked.addListener(function(activeTab)
      {
        var newURL = "http://stackoverflow.com/";
        chrome.tabs.create({ url: newURL });
      });
    </script>
  </head>
</html>

Antworten:


116

Das Problem ist, dass Sie gegen Manifest Version 2content security policy verstoßen . Um das Problem zu beheben, müssen Sie lediglich das Inline-Skript entfernen, in diesem Fall Ihren Hintergrund page. Verwandeln Sie es in einen Hintergrund scriptwie diesen:

manifest.json

"background":{
  "scripts": ["background.js"]
},

background.js

chrome.browserAction.onClicked.addListener(function(activeTab){
  var newURL = "http://stackoverflow.com/";
  chrome.tabs.create({ url: newURL });
});

Wenn Sie aus irgendeinem Grund eine Seite benötigen, fügen Sie das Skript einfach als externe Datei hinzu und deklarieren Sie es wie zuvor als Seite.


Wie kann ich die newURL von popup.js senden?
Nikhil Kulkarni

17

In meinem Fall musste ich den Link in einem neuen Tab öffnen, als ich auf einen Link im Popup-Fenster der Erweiterung klickte. Es funktionierte einwandfrei mit dem targetAttribut _blank:

<a href="http://www.example.com" target="_blank">Example</a>

5
Nun, dies öffnet einen neuen Tab in einem Browser, aber es schließt das Popup (was nicht immer erwünscht ist).
Fvrab

5

Ich würde eine einfachere Lösung bevorzugen - fügen Sie einfach eine Aktion zu onclick hinzu

$('body').on('click', 'a[target="_blank"]', function(e){
    e.preventDefault();
    chrome.tabs.create({url: $(this).prop('href'), active: false});
    return false;
});

Dadurch werden alle Links (auch dynamisch erstellte Links) mit dem Attribut target = "_ blank" in einer neuen Registerkarte geöffnet, ohne den Popup-Fokus zu verlieren.


wo nennst du das? Ich meine, ist es unter content.js oder background.js geschrieben?
Gumuruh

Es ist in content.js geschrieben
fvrab
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.