[Chrome扩展]屏蔽Google搜索结果重定向-飞外

在用Google搜索的时候,点击连接,Google不会直接进入目标网页,会先进入跳转页面(也就是重置或者重定向),使用 META http-equiv="refresh" content="0;URL='http://www.abc.com/'" 再跳转过去。但是很多时候跳不过去,次数多了就烦了。最后终于想起来自己是个程序猿,得想办法屏蔽掉这个重置,直接进入目标网址。

就这个问题,我大概经历这么几个状态。

1. 直接在地址栏删掉无用的字符串,再挨个把编码后的://之类的字符挨个改回来(好2啊)。好吧,自己都不好意思说自己是程序猿。

2. 写一个uri解码的js,在html页里解码,然后再拷到地址栏(还是2)。

3. 开始想做个Chrome Extensions,把这个跳转给屏蔽了,折腾了半天做了个右键菜单。在跳转页面点右键再调过去。

4. 发现还有更简单的,在chrome.tabs.onUpdated增加监听,判断url是否符合google的跳转url格式。然后再处理跳转。用了几天感觉还行。

5. 过了几天升级Chrome后,发现manifest_version成2了,写的扩展用不了了。好吧,哥不折腾chrome.tabs.onUpdated了,我换chrome.webNavigation.onBeforeNavigate监听。

目前只针对google.com.hk的网页搜索,暂时来说是够用了。

Extensions

首先得起个名字,暂定NavTo。最终版的扩展的内容也就3个文件,一张图片、manifest.json、main.js。

然后再找一图片,作为Logo。

manifest.json
 1: var pattern = /^https?:\/\/www\.google\.com\.hk\/url\?.* url=(.*) ei=/i;
 2: 
 3: /*chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) { 
 4: if (changeInfo.status == "loading")
 5: {
 6: if (pattern.test(changeInfo.url))
 7: {
 8: var s = changeInfo.url.indexOf(" url=") + 5,e = changeInfo.url.indexOf(" ei=");
 9: var newUrl = decodeURIComponent(changeInfo.url.substring(s, e));
 10: chrome.tabs.update(tabId, {url: newUrl});
 11: }
 12: }
 13: }); 
 14: */
 15: chrome.webNavigation.onBeforeNavigate.addListener(function(details){
 16: if(pattern.test(details.url))
 17: {
 18: var newUrl = decodeURIComponent(RegExp.$$1);
 19: chrome.tabs.update(details.tabId, {url: newUrl});
 20: }
 21: });

就这个扩展来说,时间主要花在获取当前tab页的url了。用过chrome.tabs.onCreated、chrome.tabs.getSelected,最终还是选定chrome.webNavigation.onBeforeNavigate。

chrome.webNavigation.onBeforeNavigate的效果比chrome.tabs.onUpdated的好。onBeforeNavigate先于onUpdated执行。

关于Chrome Extensions的安装,如果不知道的请Google吧。

另附打包文件。

参考扩展开发文档。