2013-05-12 23 views
5

Ich benutze eine Chrome-Erweiterung mit einer Schaltfläche in der popup.html, die eine neue Registerkarte öffnet. Die Ziel-URL der neuen Registerkarte enthält die URL der aktuellen (ursprünglichen) Registerkarte als Parameter.Chrome Erweiterung tab.url undefined

Zum Beispiel: Wenn von http://stackoverflow.com/ gefeuert, sollten die neuen Registerkarte eine URL wie http://www.mydestination.com/index.php?url=http://stackoverflow.com/ haben

Hier ist meine js:

document.addEventListener('DOMContentLoaded', function (tab) { 

    document.getElementById('button').addEventListener("click", function(tab) { 
     chrome.tabs.create({url: 'http://www.mydestination.com/index.php?url=' + tab.url}); 
    }); 

}) 

Die neuen Registerkarte perfekt geöffnet werden, aber die URL http://www.mydestination.com/index.php?url=undefined (url = undefiniert).

Ich rechne damit, die manifest.json die richtigen Berechtigungen besitzt:

{  
"manifest_version": 2, 
"name": "My project", 
"version" : "1.7", 
"browser_action": { 
    "default_icon" : "img/icon.png", 
    "default_title" : "My project", 
    "default_popup": "html/main.html" 
}, 
"permissions": [ 
    "tabs" 
], 
"icons": { 
    "16": "img/icon.png" 
} 
} 

Irgendwelche Hinweise, wie Sie die URL richtig transportiert werden?

+0

whoa warten "Registerkarte" wäre eigentlich das Click-Ereignis, tragen meinen Sie 'addEventListener ("Klick", function (evt, tab) {...' – 1337holiday

Antwort

4

Das Problem ist, dass aktuelle Registerkarte ist Ihr Chrom-Popup. In diesem Fall haben Sie keine gültige URL. Sie müssen Ihre Registerkarte auswählen. Um dies zu tun, können Sie chrome.tabs.query verwenden. Wählen Sie aktuelle Fenster mit aktiven Reitern:

document.addEventListener('DOMContentLoaded', function() { 
    document.getElementById('button').addEventListener("click", function() { 
     chrome.tabs.query({ 
      'active': true, 
      'windowId': chrome.windows.WINDOW_ID_CURRENT 
     }, function (tabs) { 
      chrome.tabs.create({ 
       url: 'http://www.mydestination.com/index.php?url=' + tabs[0].url 
      }); 
     }); 
    }); 
}); 
+0

Danke, das funktioniert wie ein Zauber! – Lionel

1

Das Problem ist, dass Sie tab als Parameter übergeben, wenn es nichts mit den Ereignissen zu tun hat. Während einige chrome.* API ein Tab-Objekt als Parameter enthalten, können Sie es nicht einfach so hinzufügen und erwarten, dass es die gewünschten Informationen hat. Sie könnten so etwas tun:

+0

Fast Die selbe Antwort zur selben Zeit: D –

+0

@WaleryStrauch haha, das ist ziemlich lustig – BeardFist

+0

Ihr seid miteinander synchronisiert – Lionel