Google Chrome: Redirect URL

风行水上 @ 2014-11-15 22:34:08
标签:

    在国内经常访问国外网站的人可能碰到这样一种情况:

    • 网页加载缓慢
    • 不是被墙
    • 浏览器底部状态栏显示正在加载Goole Font文件
    • 点击浏览器的"Stop"按钮,页面可以显示

    如上情况的原因,实际上是

    • 浏览器已经读取了网页HTML代码
    • 网页HTML代码中引用了Google Font
    • Font属于CSS(样式表)的一部分
    • 浏览器加载CSS时是阻塞模式
    • Google CDN被墙了
    • 点击"Stop"按钮终止了外部资源文件的加载
    • 页面内容在缺少一些资源的情况下进行渲染,页面显示

    虽然上面提到的是Google Font文件,实际上这个问题具有广泛的意义。

    这时要解决该问题,可能的思路有:

    • 翻墙。
    • 阻止(Block) Google Font文件的加载。
    • 从别处加载对应的Google Font文件。

    利用 Google Chrome 插件API

    • 需要的权限:webRequestwebRequestBlockinghost

    在文件"background.js"(这个名字只是惯例)中的代码如下:

    chrome.webRequest.onBeforeRequest.addListener(function(details){
        var redirect_url = details.url.replace("googleapis.com", "useso.com");
    
        if(redirect_url != details.url) {
          console.log([details.url,redirect_url].join(' => '));
        }
    
        return {redirectUrl: redirect_url};
      },
      { urls : ["http://ajax.googleapis.com/*", "http://fonts.googleapis.com/*"] },
      ["blocking"]
    );
    

    上面的代码是把请求"googleapis.com"重定向到"useso.com"。

    "useso.com"是360网站卫士常用前端公共库CDN服务

    • 第三个参数中的"blocking",表示同步执行,即回调函数返回后,才继续当前URL的请求过程。

    利用hosts文件block相关域名

    在"hosts文件中添加下面的行以阻止Google Font文件所在的域名(fonts.goolgeapis.com)。

    0.0.0.0	fonts.goolgeapis.com
    

    利用本地代理来处理请求

    如果设置一个本地代理服务器,就可以

    • 或者阻止某些请求
    • 或者从本地缓存读取相应内容
    • 或者“修改”某些请求的内容
    标签:

      分享到:
      comments powered by Disqus

      27/31ms