前言
在用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: {
2: "name": "Navigate to",
3: "version": "1.0",
4: "manifest_version": 2,
5: "description": "Navigating to the real URL",
6: "icons": {"128": "icon128.png"},
7: "permissions": ["webNavigation"],
8: "background": {
9: "scripts": ["main.js"]
10: }
11: }
main.js
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吧。
另附打包文件。
参考扩展开发文档。