6

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

例如:当从 触发时http://stackoverflow.com/,新标签应该有一个类似的 URLhttp://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});
    }); 

})

新标签页完美打开,但 URL 为http://www.mydestination.com/index.php?url=undefined(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"
}
}

有关如何正确传输网址的任何线索?

4

2 回答 2

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
            });
        });
    });
});
于 2013-05-12T21:04:07.470 回答
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});
    });
  }); 
});
于 2013-05-12T21:03:49.143 回答