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>
Tuyen Pham
quelle

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.

Bartfaust
quelle
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>
Ego
quelle
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.

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