Javascript Google Chrome插件:如何从URL(tab.URL)获取域
使用Google Chrome API,从整个价值中获取域的最佳方法是什么 在JavaScript中,我将使用Javascript Google Chrome插件:如何从URL(tab.URL)获取域,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,使用Google Chrome API,从整个价值中获取域的最佳方法是什么 在JavaScript中,我将使用window.location.protocol&window.location.hostname。例如,类似这样的事情: var domain = window.location.protocol + "//" + window.location.hostname; 但是它获取的是扩展域而不是选项卡,因此无法使用该方法。所以用一个类似于下面的函数。。。如何从tab.url值中删除域
window.location.protocol
&window.location.hostname
。例如,类似这样的事情:
var domain = window.location.protocol + "//" + window.location.hostname;
但是它获取的是扩展域而不是选项卡,因此无法使用该方法。所以用一个类似于下面的函数。。。如何从tab.url
值中删除域
function show_alert() {
chrome.tabs.getSelected(null, function(tab) {
var currentURL = tab.url;
alert(currentURL);
});
}
首先,域不包括协议。我已经为您的问题创建了一个正则表达式。要获取URI的主机名(您可能希望这样做,因为IP地址不是域),请使用以下命令:
var domain = uri.match(/^[\w-]+:\/{2,}\[?([\w\.:-]+)\]?(?::[0-9]*)?/)[1];
// Given uri = "http://www.google.com/", domain == "www.google.com"
chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) {
var tab = tabs[0];
var url = new URL(tab.url)
var domain = url.hostname
// `domain` now has a value like 'example.com'
})
如果要使用源(协议+主机(不是主机名,这是有区别的)+可选端口)而不是域,请使用:
由于这个问题最初得到了回答,因此出现了一个更好的解决方案 大多数现代浏览器现在都支持使用,它提供对
href
、主机名
、路径
的访问,以及所有拆分URL的标准方式
要获取域,可以执行以下操作:
var domain = uri.match(/^[\w-]+:\/{2,}\[?([\w\.:-]+)\]?(?::[0-9]*)?/)[1];
// Given uri = "http://www.google.com/", domain == "www.google.com"
chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) {
var tab = tabs[0];
var url = new URL(tab.url)
var domain = url.hostname
// `domain` now has a value like 'example.com'
})
组合:但不使用折旧的
getSelected
和。想知道这是否可以通过getCurrent
来完成,这应该是可以接受的答案。对疯狂的正则表达式说不就行了!:-)@ross zurowski你能看看我关于从折旧的getSelected
方法迁移的帖子吗?也许可以使用getCurrent
overquery
@谢谢你的邀请。我刚刚更新了这个答案,使用了新的query
API,而不是旧的getSelected
one。谢谢@RossZurowski!你能以任何方式让getCurrent
工作吗?@kinghat,我还没试过。根据,使用query({active:true})
是获取当前选项卡的新推荐方法-我认为这是因为getCurrent
返回undefined
。