Tabs.url未定义。

4

我不知道我在这里做错了什么!我相信这应该是有效的。我正在编写一个Chrome扩展程序,它应该获取当前标签页的URL,并将#current-tab的HTML设置为该URL(用于测试目的)。该代码成功到达回调函数,但是当我把它放在alert框中时,它说tab.url未定义,并且未将其值放入#current-tab中。这是我的代码:

$('#get-tab').click(function(){
    chrome.tabs.query({"active" : true}, function(tab){
        for (var i = 0; i < tab.length; i++) {
            alert(tab[i].url);
            $('#current-tab').append(tab[i].url);
        };
    });
});

那不应该是 tab[i].url 吗? - jonvuri
@Kiyura Ha,看来我们的想法一致 :) - RocketDonkey
最初我这样做 (tab[i].url) 是因为我知道它返回一个数组,但似乎也不起作用,所以我发了我尝试的脚本,虽然对我来说没有太多意义,但我正在进行实验...请参见上面我的编辑,其中包含我的原始代码。 - LICHEN
2个回答

3

我找出了问题所在! 显然,您需要重新加载扩展程序以刷新清单文件的更改! 我后来添加了权限,但没有在扩展程序管理器中重新加载扩展程序,因此更改没有生效!我们现在可以继续进行了!


哈哈,原来是清单文件,太好了!是tabs部分出了问题吗? - RocketDonkey
这里也有同样的问题。这应该出现在谷歌扩展文档的首页上。 - RoarG
谢谢!我因为你的帮助解决了我的问题 :D - José Manuel Blasco

2

chrome.tabs.query 实际上返回 Tab 对象数组,因此您必须在数组中引用选项卡(即使只有一个 Tab):

$('#get-tab').click(function(){
chrome.tabs.query({"active" : true}, function(tab){
    for (var i = 0; i < tab.length; i++) {
        alert(tab[i].url);
        $('#current-tab').append(tab[i].url);
    };
  });
});

最初我这样做 (tab[i].url) 是因为我知道它返回一个数组,但似乎也不起作用,所以我发了我尝试的脚本,虽然对我来说没有太多意义,但我正在进行实验...请参见上面我的编辑,其中包含我的原始代码。 - LICHEN
@Notionwork 我们先选择简单的方式(希望如此 :))- 你的 manifest.json 文件中有 permissions 中的 tabs 吗? - RocketDonkey
是的!这是我的清单:{ "name" : "Notionwork Site Manager", "version" : "1.0", "manifest_version" : 2, "description" : "该管理器可组织感兴趣的站点,并将相应的书签添加到Chrome书签管理器中", "browser_action" : { "default_icon" : "icon.png", "default_popup" : "popup.html" }, "permissions" : [ "tabs" ], "icons" : { "128" : "icon.png" } } - LICHEN
@Notionwork 好的,让我们解决这个问题。你在哪里定义你的JavaScript?是直接在 popup.html 中吗?在manifest v2中,有一个问题是你不能再使用内联脚本,所以如果它在里面,请尝试将其移动到一个名为 popup.js 的后台脚本中,然后从 popup.html 调用它。 - RocketDonkey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接