惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
V2EX
C
Check Point Blog
博客园_首页
B
Blog
D
Docker
U
Unit 42
量子位
I
InfoQ
有赞技术团队
有赞技术团队
Martin Fowler
Martin Fowler
GbyAI
GbyAI
L
LangChain Blog
云风的 BLOG
云风的 BLOG
博客园 - Franky
美团技术团队
T
The Blog of Author Tim Ferriss
阮一峰的网络日志
阮一峰的网络日志
月光博客
月光博客
Vercel News
Vercel News
Recent Announcements
Recent Announcements
雷峰网
雷峰网
大猫的无限游戏
大猫的无限游戏
小众软件
小众软件
Google DeepMind News
Google DeepMind News

博客园 - 彭旭

VNC远程Gnome图形桌面(openEuler 20.03 LTS系统) [WPF]控件应用多个样式 [ASP.NET MVC] Real-time之HTML5 服务器发送事件(server-sent event) [WCF]DomainServices客户端操作异常处理 [Silverlight]监听指定控件(FrameworkElement)的依赖属性(DependencyProperty)的更改 [Silverlight]键盘钩子KeyboardHook Linq Distinct扩展 [Winform/C#]点击工作区域移动窗体 [WinForm] C#避免Panel(ScrollableControl)的子控件获取焦点时滚动条自动滚动 C#远程连接Oracle数据库(不安装客户端) RichTextBox.MouseWheel事件控制父控件Panel的内容滚动 ID3v1信息结构(MP3文件)的读取、修改(C#) 在线编辑Office文件 SQL优化 将自然数分解为若干连续的自然数 小写金额转换为大写金额 大数阶乘 查看文件夹大小及占用空间 VS2005开发WAP网站初识 - 彭旭 - 博客园
[Chrome扩展]屏蔽Google搜索结果重定向
彭旭 · 2012-12-17 · via 博客园 - 彭旭

前言

在用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吧。

另附打包文件

参考扩展开发文档