如何从Google Chrome扩展程序获取当前标签的url?

我对Google Chrome浏览器扩展程序很有兴趣,我只想知道如何将当前选项卡的URL存储在variables中?

更新:现在不推荐使用chrome.tabs.getSelected()方法。

获取当前选项卡的URL的推荐方法是使用chrome.tabs.query()

一个示例用法:

 chrome.tabs.query({'active': true, 'lastFocusedWindow': true}, function (tabs) { var url = tabs[0].url; }); 

这要求您请求访问扩展清单中的chrome.tabs API:

 "permissions": [ ... "tabs" ] 

请注意,“当前标签”的定义可能因您的分机的需求而异。

如果要访问用户关注的窗口(通常是最上面的窗口)中的当前选项卡,则在查询中设置lastFocusedWindow: true是适当的。

设置currentWindow: true允许你在当前正在执行扩展代码的窗口中获取当前标签。 例如,如果您的扩展程序创build一个新的窗口/popup窗口(更改焦点),但是仍希望从运行扩展的窗口访问选项卡信息,这可能会很有用。

在本例中,我select使用lastFocusedWindow: true ,因为Google会调出currentWindow 可能不总是存在的情况 。

您可以使用以下定义的任何属性进一步优化选项卡查询: chrome.tabs.query

一位朋友回答我的问题。

首先,您必须设置选项卡API的权限:

 "permissions": [ "tabs" ] 

并存储url:

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

问题是chrome.tabs.getSelected是asynchronous的。 下面的代码通常不会按预期工作。 当它被写入控制台时,“tablink”的值仍然是未定义的,因为getSelected尚未调用重置值的callback:

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

其他答案假设你想从popup或背景脚本知道它。

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

 window.location.toString() 

您可以使用window.location属性来访问URL的各个部分,例如主机,协议或path。

您好,这里是一个谷歌浏览器样本,通过电子邮件将当前网站发送给朋友。 背后的基本思想是你想要的…首先它提取页面的内容(不是为了expression你的意思)…然后它得到URL(< – 好的部分)

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

可以在这里find: 电邮本页

对于那些使用context menu api ,文档并没有立即清楚如何获取标签信息。

  chrome.contextMenus.onClicked.addListener(function(info, tab) { console.log(info); return console.log(tab); }); 

https://developer.chrome.com/extensions/contextMenus

你必须检查这一点 。

HTML

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

的manifest.json

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

JavaScript的
下面的代码将把所有活动窗口的url保存到JSON对象中,作为button点击的一部分。

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