2009-12-30 93 views

回答

64

一位朋友回答我的问题。

首先,你要设置的权限选项卡API:

"permissions": [ 
    "tabs" 
] 

以及存储的网址:

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

代码的第二部分是针对弹出文件的情况 – Axiol 2009-12-30 11:38:54

+1

它仅仅用于弹出(页面动作,浏览器动作)的原因是因为你发送了一个“null”成第一个参数。 http://code.google.com/chrome/extensions/tabs.html#method-getSelected 文档状态第一个参数是windowId,如果你想在选项或背景页面中使用它,你需要要放入窗口ID,或者您将分别获取当前选项卡的未定义选项。 – 2009-12-30 17:06:00

+1

是的它的工作原理,但不知道为什么chrome.tabs.getSelected方法不能在参考文档中找到。 – swimmingfisher 2012-04-25 03:21:56

2

你好这里是谷歌浏览器样品哪些电子邮件当前网站给朋友。背后的基本理念是你想要的...首先它提取页面的内容(不是为了表达你的意思)...之后它会得到URL(< - 很好的部分)

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

可以在这里找到: Email this page

24

的问题是,chrome.tabs.getSelected是异步的。下面的代码通常不会按预期工作。

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

解决的办法是包,你将使用代码:当它被写入到控制台,因为getSelected尚未调用的重置价值回调“tablink”的值仍然是undefined值在一个函数中,并由getSelected调用。通过这种方式,您可以保证始终有一个值集,因为您的代码在执行之前必须等待提供的值。

尝试类似:

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

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

感谢您的代码,这为我工作,“标签”需要被添加到manifest.json文件“权限”的权限:[ “标签” ] – 2011-04-13 15:45:40

+0

此外,它的作品就像一个魅力: [获取当前窗口的弹出式窗口(谷歌Chrome扩展)](http://stackoverflow.com/questions/3030738/getting-current-window-on-a-popup-google-chrome-extension) – chemark 2013-05-30 23:29:16

+0

而且,如何获得所有打开的标签链接 – Enve 2013-07-27 18:04:51

118

更新:chrome.tabs.getSelected()方法现在已经过时。

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

使用示例:

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

这就需要你请求访问chrome.tabs API在extension manifest

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

需要注意的是你的“当前标签”的定义是非常重要的可能会因您的分机的需要而有所不同。

查询中的设置lastFocusedWindow: true适合于当您要访问用户关注的窗口(通常是最上面的窗口)中的当前选项卡时。

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

在本例中,我选择使用lastFocusedWindow: true,因为Google会调出其中的currentWindowmay not always be present

你可以自由地进一步细化使用任何这里定义的属性的标签查询:chrome.tabs.query

+13

为什么网址总是未定义? – nnm 2014-05-31 12:27:17

+0

如果URL未定义,请尝试从chrome重新加载您的扩展:// extensions 这将重新加载扩展的配置并应用新添加的“选项卡”权限。 – flashbackzoo 2016-04-16 23:34:15

+1

网址未定义,因为http://stackoverflow.com/questions/28786723/why-doesnt-chrome-tabs-query-return-the-tabs-url-when-called-using-requirejs(回答:关闭您的开发工具窗口或更改为currentWindow而不是lastFocusedWindow) – kspearrin 2016-09-14 03:01:18

-1

你必须检查this

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

我的Chrome扩展程序用于在活动窗口中保存URL的方式是https://chrome.google.com/webstore/detail/tabstore-plugin/jngplpdonggccbjlmbphlbancacmpmpp – 2015-10-08 04:49:29

14

其他答案假设你想通过弹出或背景脚本知道它。

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

window.location.toString() 

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

+0

拇指向上,这是最简单的解决方案。 – dalvarezmartinez1 2016-08-22 20:38:11

+0

很棒的回答。所有我想要的是'window.location.host'来查看是否在“stackoverflow.com”Im。 – Salyangoz 2017-09-07 06:10:36

相关问题