【问题标题】:How to mobilize all links, in a browsed page, using Google Mobilizer?如何使用 Google Mobilizer 调动浏览页面中的所有链接?
【发布时间】:2013-10-13 09:28:27
【问题描述】:

我正在尝试通过Google Mobilizer 提供的这项出色服务使我的某些页面上的链接“动员起来”。

EG:更改 URL,例如:

http://imgur.com/ 

到:

http://www.google.com/gwt/x?u=imgur.com

Google Mobilizer 大大减小了传递给它的任何 URL 的大小。图像尺寸变小。仅渲染动画 gif 的第一帧,基本上任何资源的大小都会大大减小。这大大减少了低带宽和高延迟连接上的下载时间。

这可以通过插件或用户脚本在 Firefox 中完成吗?让网页上的所有链接都以www.google.com/gwt/x?u=为前缀?

a Chrome extension 实际上为您提供了一个上下文菜单项来执行此操作。

【问题讨论】:

    标签: firefox mobile web greasemonkey


    【解决方案1】:

    是的,Firefox 插件可以做到这一点,Firefox Greasemonkey 脚本也应该可以做到。

    以下是如何使用 Firefox-only Greasemonkey 脚本来完成它的概要:

    1. 将脚本设置为新的<a><img>可能<iframe> 元素的run at document-start and use MutationObservers to watch for the creation

    2. 当发现新的<a><iframe>等元素时,重写其srchref属性以使用动员服务。

    3. 当发现新的<img> 时,事情会变得有些棘手。 我认为如果您删除 <img> 节点,它会停止加载该图像(如果它已经开始)。这需要测试,以及对图像服务器的影响。

      如果仍然加载原始图像,则放弃此方法并使用附加组件。或者,您可以使用 AdBlock Plus 来阻止原始图像。

      无论如何,这种情况下的步骤是:

      1. 复制<img>节点的outerHTML
      2. 注意<img> 节点的父节点和节点相对于兄弟节点的位置。
      3. 删除<img> 节点。
      4. 修改src 部分以指向动员服务。
      5. 在旧节点所在的位置创建一个新的<img> 节点。

    【讨论】:

      【解决方案2】:

      这对我有用。它将页面上的所有链接替换为附加的 Google Mobilizer URL。

      if (!(
      // Except when on ...
                  (/google.com\/search/.test(document.URL))
              ||  (/google.*\/gwt/.test(document.URL))
          )){     
          var link = document.body.getElementsByTagName("a");
          for (var i = 0; i < link.length; i++) {
              if (!(
      //Only for external links
                          (link[i].hostname == window.location.hostname)
      //And except for links that contain... 
                      ||  (/google\./.test(link[i].href))
                      ||  (/stack/.test(link[i].href))
                      ||  (/reddit\./.test(link[i].href))
      //And except for Null & Javascript-purpose links...
                      ||  (/\0/.test(link[i].href))
                  )){
      //Mobilize all links (append mobilizer URL)
                  link[i].href = link[i].href.replace("http","http://google.com/gwt/x?u=http")
                  }
              }
          }
      else if (/google.*\/gwt/.test(document.URL)){
      // But when on Google Mobilizer site itself, ...
          var link = document.body.getElementsByTagName("a")
          for (var i = 0; i < link.length; i++) {
              if ((/gwt\/x\/e\?/.test(link[i].href))) {
      //De-mobilize (just) "View page directly" link (because it unnecessarily prompts for redirection)
                  var inner = link[i].href.indexOf('http',1);
                  inner = inner>-1 ? link[i].href.substr(inner,link[i].href.indexOf('&',inner)-inner) : false;
                  if (inner)
                      link[i].href = inner;
                  }
              }
          }
      

      它还会检查if 链接是否属于父站点域,并且不会更改它们。

      【讨论】:

      • 这只是 static 链接,而您的问题不止一点涉及 images 并包括 imgur .com 在它的示例 URL 中。这种方法也不适用于 AJAX 驱动的页面。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-22
      • 2021-09-16
      • 2014-09-23
      • 2014-10-19
      • 2013-10-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多