我有谷歌Chrome扩展的乐趣,我只是想知道我如何在变量中存储当前选项卡的URL ?


当前回答

问题是chrome.tabs.getSelected是异步的。下面的代码通常不能正常工作。tablink的值在被写入控制台时仍然是未定义的,因为getSelected还没有调用重置值的回调:

var tablink;
chrome.tabs.getSelected(null,function(tab) {
    tablink = tab.url;
});
console.log(tablink);

解决方案是在函数中使用值的地方包装代码,并由getSelected调用该值。通过这种方式,您可以保证始终拥有一个值集,因为您的代码在执行之前必须等待该值被提供。

试着这样做:

chrome.tabs.getSelected(null, function(tab) {
    myFunction(tab.url);
});

function myFunction(tablink) {
  // do stuff here
  console.log(tablink);
}

其他回答

其他答案假设你想从弹出窗口或后台脚本中知道它。

如果你想从内容脚本中知道当前的URL,标准的JS方式适用:

window.location.toString()

你可以使用window的属性。位置来访问URL的各个部分,如主机、协议或路径。

警告!已弃用chrome.tabs.getSelected。请使用chrome.tabs.query,如其他答案所示。


首先,你必须在manifest.json中设置API的权限:

"permissions": [
    "tabs"
]

并存储URL:

chrome.tabs.getSelected(null,function(tab) {
    var tablink = tab.url;
});

嗨,这里是一个谷歌Chrome样本,电子邮件当前的网站给一个朋友。背后的基本理念是你想要什么…首先,它获取页面的内容(对你来说不感兴趣)…然后它得到URL(<——好部分)

此外,这是一个很好的工作代码示例,我更喜欢阅读文档。

可在这里找到: 通过电子邮件发送本页

你得检查一下。

HTML

<button id="saveActionId"> Save </button>

manifest.json

  "permissions": [
    "activeTab",
    "tabs"
   ]

JavaScript 下面的代码将活动窗口的所有url保存为JSON对象,作为按钮单击的一部分。

var saveActionButton = document.getElementById('saveActionId');
saveActionButton.addEventListener('click', function() {
    myArray = [];
    chrome.tabs.query({"currentWindow": true},  //{"windowId": targetWindow.id, "index": tabPosition});
    function (array_of_Tabs) {  //Tab tab
        arrayLength = array_of_Tabs.length;
        //alert(arrayLength);
        for (var i = 0; i < arrayLength; i++) {
            myArray.push(array_of_Tabs[i].url);
        }
        obj = JSON.parse(JSON.stringify(myArray));
    });
}, false);

这是一个非常简单的方法

window.location.toString();  

你可能不得不这样做的内容脚本,因为它有所有的功能,在一个网页上的js文件可以有和更多。