在开发chrome插件开发的时候难免遇到获取浏览器地址栏url,进行相关操作。JavaScript有一些获取url的函数,但是对于插件来说,直接应用这些函数并不能实现url的获取。
一、在讲获取url之前,首先得了解url的组成:
- scheme:通信协议,常用的http,ftp,maito等。
- host:主机,服务器(计算机)域名系统 (DNS) 主机名或 IP 地址。
- port:端口号,整数,可选,省略时使用方案的默认端口,如http的默认端口为80。
- path:路径,由零或多个"/"符号隔开的字符串,一般用来表示主机上的一个目录或文件地址。
- query:查询,可选,用于给动态网页(如使用CGI、ISAPI、PHP/JSP/ASP/ASP.NET等技术制作的网页)传递参数,可有多个参数,用"&"符号隔开,每个参数的名和值用"="符号隔开。
- fragment:信息片段
二、直接利用JavaScript获取url
1.获取整个url:window.location.href
2.获取url协议:window.location.protocol
3.获取url主机:window.location.host
4.获取url端口:window.location.port
5.获取url路径:window.location.pathname
6.获取url查询或参数部分(链接中“?”号后面的部分):window.location.search
7.获取url信息片段:window.location.hash
三、在chrome插件中获取url
1、通过webNavigation获取url,并通过判断跳转链接
chrome.webNavigation.onBeforeNavigate.addListener(function(details){ var geturl = details.url;};这样geturl即是当前页面的url,如果要在本页面通过某种限定条件跳转到另一个页面:
chrome.webNavigation.onBeforeNavigate.addListener(function(details){ var geturl = details.url; if (//你要设置的条件){ var newurl=“你要跳转的链接” chrome.tabs.update(details.tabId,{url:newurl}); } });
注:上面的代码可以实现在当前网页直接跳转,因为在chrome的background。js里面,window.location.href(url),是不管用的,通常只能通过window.open来在新的tab中打开网页。
2、通过chrome.tabs.onUpdated.addListener获取url,并通过判断屏蔽访问并重定向链接
这个函数同样可以在chrome的英文开发文档里找到,具体解释参看开发文档
例子:
chrome.tabs.onUpdated.addListener(function(tabId,changeInfo,tab){ var geturl = tab.url; var re=/select|update|delete|truncate|join|union|exec|insert|drop|count|'|"|;|>|</i; if(re.test(geturl)){ alert("请勿输入非法字符"); } });这个函数会执行好几次,原因是 tabs.onUpdated有两个状态,一个是loading,一个是complete。所以,处理这个事件时,应该要判断下状态(if(changeinfo.status ==“loading”))
重定向:
chrome.tabs.onUpdated.addListener(function(tabId,changeInfo,tab){ var geturl = tab.url; if (changeInfo.status == "loading" && “你自己的条件”)){ //调用向安全网址重定向的函数 chrome.webRequest.onBeforeRequest.addListener( function(details){ return { redirectUrl:details.url.replace(geturl,“你要重定向的网址”) }; }, { urls:[ //适用的网站:到时候要修改 "<all_urls>" ] }, [ "blocking" ] ) } });但是这个方法在第一次执行的时候,是可以正确执行的,但到第二次就会出错,显示“网址已经重定向到xxxx网址,不能再定向到XXX(此处为第二次输入的网址)”。后面再研究研究这个错误,看怎么解决