2013-05-12 19 views
5

Używam rozszerzenia chrome z przyciskiem w popup.html, który otwiera nową kartę. Docelowy adres URL nowej karty zawiera jako parametr parametr adresu URL bieżącej (oryginalnej) karty.Karta rozszerzenia Chrome.url undefined

Na przykład: kiedy zwolniony z http://stackoverflow.com/ nowa zakładka powinna mieć URL podobnego http://www.mydestination.com/index.php?url=http://stackoverflow.com/

Oto moje 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}); 
    }); 

}) 

Nowa karta jest całkowicie otwarty, ale adres URL jest http://www.mydestination.com/index.php?url=undefined (URL = niezdefiniowane).

Sądzę manifest.json posiada odpowiednie uprawnienia:

{  
"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" 
} 
} 

żadnych wskazówek, w jaki sposób uzyskać adres URL prawidłowo transportowane?

+0

whoa czekać "zakładka" byłby rzeczywiście zdarzenie click, dont znaczy 'addEventListener ("click", function (EVT, tab) {...' – 1337holiday

Odpowiedz

4

Problem polega na tym, że obecna zakładka to twoje chrome popup. W tym przypadku nie masz prawidłowego adresu URL. Musisz wybrać swoją kartę. Aby to zrobić, możesz użyć chrome.tabs.query. Wybierz bieżące okno z aktywną kartę:

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

Dzięki temu milowi ​​działa to jak czar! – Lionel

1

Problem polega na tym, że przekazujesz tab jako parametr, gdy nie ma to nic wspólnego ze zdarzeniami. Podczas gdy niektóre apikaty chrome.* zawierają obiekt tabulatora jako parametr, nie możesz po prostu dodać go w ten sposób i oczekiwać, że ma on potrzebne informacje. Możesz zrobić coś takiego:

document.addEventListener('DOMContentLoaded', function() { 
    document.getElementById('button').addEventListener("click", function() { 
    chrome.tabs.query({active:true, currentWindow:true},function(tab){ 
     // Just doing it like this to make it fit on the page 
     var newUrl = "http://www.mydestination.com/index.php?url=" + tab[0].url; 
     chrome.tabs.create({url:newUrl}); 
    }); 
    }); 
}); 
+0

Prawie ta sama odpowiedź w tym samym czasie: D –

+0

@WaleryStrauch haha, to jest całkiem zabawne – BeardFist

+0

Jesteście zsynchronizowani! – Lionel