[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: {
   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吧。

另附打包文件

参考扩展开发文档

知识共享许可协议
本文彭旭 创作,采用 知识共享 署名-相同方式共享 3.0 中国大陆 许可协议进行许可。欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
原文地址:https://www.cnblogs.com/ainijiutian/p/2821926.html