我在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"
}
}
有关如何正确运送网址的任何线索?
答案 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});
});
});
});