• [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 中国大陆 许可协议进行许可。欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
  • 相关阅读:
    ASP.NET SignalR 系列(九)之源码与总结
    ASP.NET SignalR 系列(八)之跨域推送
    ASP.NET SignalR 系列(七)之服务端触发推送
    ASP.NET SignalR 系列(六)之连接事件
    ASP.NET SignalR 系列(五)之群组推送
    ASP.NET SignalR 系列(四)之指定对象推送
    ASP.NET SignalR 系列(三)之代码实现
    ASP.NET SignalR 系列(二)之项目创建
    ASP.NET SignalR 系列(一)之SignalR介绍
    Splunk带来的好处
  • 原文地址:https://www.cnblogs.com/ainijiutian/p/2821926.html
Copyright © 2020-2023  润新知