Chrome扩展程序tab.url未定义

时间:2013-05-12 19:34:21

标签: google-chrome-extension

我在popup.html中使用带有按钮的chrome扩展程序,可以打开一个新标签页。新选项卡的目标URL将当前(原始)选项卡的URL保存为参数。

例如:从http://stackoverflow.com/解雇时,新标签应包含http://www.mydestination.com/index.php?url=http://stackoverflow.com/

等网址

这是我的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});
    }); 

})

新标签打开完美,但网址为http://www.mydestination.com/index.php?url=undefined(网址=未定义)。

我认为manifest.json拥有正确的权限:

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

有关如何正确运送网址的任何线索?

2 个答案:

答案 0 :(得分:4)

问题是当前标签是你​​的chrome弹出窗口。在这种情况下,您没有有效的URL。 您必须选择标签。为此,您可以使用chrome.tabs.query。使用活动标签选择当前窗口:

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

答案 1 :(得分:2)

问题在于,当您与事件无关时,您将tab作为参数传递。虽然有些chrome.* api确实包含了一个标签对象作为参数,但您不能只是像这样添加它并期望它拥有您想要的信息。你可以这样做:

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