我使用什么 Firefox 功能来重写并打开活动页面的 URL?

我使用什么 Firefox 功能来重写并打开活动页面的 URL?

我们的大学提供代理服务这让我可以像通过大学网络在线一样浏览网站。但是,我很懒,我厌倦了在 Firefox 中转到 URL 编辑字段并更改https://superuser.com/http://superuser.com.ezproxy.its.uu.se/并打开该新 URL。

相反,我更喜欢在我的火狐窗口。因此,我的问题是,我如何创建这样的功能。我对 userscript、ubiquity 或附加组件作为解决方案感到满意:我应该使用哪种 Firefox 功能来完成附加任务ezproxy.its.uu.se到任何 URL 的域部分,然后打开该新 URL?

答案1

你也可以看看LibX——“图书馆的浏览器插件”可以自动为您执行此类功能:

通过 EZProxy 或 WAM 进行校外访问

如果您的机构使用 EZ Proxy 或 III 的 WAM,则支持校外访问授权资源。您可以通过代理重新加载页面,或通过代理跟踪链接,使其看起来像您来自校内计算机。此功能使您可以访问只有校内用户才能访问的资源。您可以设置 EZProxy,以便 LibX 自动检测页面是否可以代理。

答案2

更改位置保存以下内容为书签

javascript:(function(){
  location.href = location.href.replace(
    location.hostname, location.hostname + '.ezproxy.its.uu.se'
  );
})()

但是,上述操作首先需要你告诉 Firefox 加载原始 URL(因此,你必须在位置栏中按回车键)才能获取位置对象填充。相反,要提示输入 URL,而不是先让浏览器(尝试)加载它:

javascript:(function(){
  var url = prompt('Type URL to browse');
  var suffix = '.ezproxy.its.uu.se';

  /* Don't know how the proxy would handle https or specific ports;
   * let's just copy them...
   * $1 = optional protocol, like 'http[s]://'
   * $2 = domain, like 'superuser.com'
   * $3 = optional port, like ':8080'
   * $4 = rest of the URL, like '/questions/154689/ .. page/154692#154692'
   */
  url = url.replace(
          /(\w*:\/\/)?([^:\/]*)(:[0-9]*)?(.*)/, '$1$2' + suffix + '$3$4'
        );
  if(url.indexOf('http') != 0){
    url = 'http://' + url;
  }
  location.href = url;
})()


一旦你切换到使用代理,你可以使用一些 jQuery magic 来重写代理提供的 HTML 中的每个位置 - 但只需要如果它不会在运行时为你执行这些操作。要保存为用户脚本(例如油脂猴), 一些初始代码首先确保 jQuery 可用, 并仅包括对于您的代理服务器的域(因此仅当您使用该代理浏览时):

// ==UserScript==
// @name           Rewrite URLs to use proxy
// @namespace      http://superuser.com/questions/154689/
// @description    Rewrites absolute URLs to use proxy
// @include        http://*.ezproxy.its.uu.se/*
// ==/UserScript==

var $;
var suffix = '.ezproxy.its.uu.se';

// Rewrites an attribute to include the proxy server address, if a full
// domain is specified in that attribute.
function rewriteAttr(attrName){
  $('[' + attrName + ']').attr(attrName, function(){
    // Don't know how the proxy would handle https or specific ports;
    // let's just copy them...
    // $1 = protocol, like 'http[s]://'
    // $2 = domain, like 'superuser.com'
    // $3 = optional port, like ':8080'
    // $4 = rest of the URL, like '/questions/154689/ .. page/154692#154692'
    return $(this).attr(attrName).replace(
      /(\w*:\/\/)([^:\/]*)(:[0-9]*)?(.*)/, '$1$2' + suffix + '$3$4'
    );
  });
}

// Rewrite anchors such a <a href="http://superuser.com/xyz"> and references
// like <link rel="stylesheet" href="http://sstatic.net/su/all.css">
function letsJQuery() {
  rewriteAttr('href');
  rewriteAttr('src');
}

// Loads jQuery if required. 
// See http://joanpiedra.com/jquery/greasemonkey/
(function(){
  if (typeof unsafeWindow.jQuery == 'undefined') {
    var GM_Head = document.getElementsByTagName('head')[0] 
          || document.documentElement;
    var GM_JQ = document.createElement('script');

    GM_JQ.src = 
      'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js';
    GM_JQ.type = 'text/javascript';
    GM_JQ.async = true;

    GM_Head.insertBefore(GM_JQ, GM_Head.firstChild);
  }
  GM_wait();
})();

// Check if jQuery's loaded
function GM_wait() {
  if (typeof unsafeWindow.jQuery == 'undefined') {
    window.setTimeout(GM_wait, 100);
  } else {
    $ = unsafeWindow.jQuery.noConflict(true);
    letsJQuery();
  }
}

答案3

答案4

这正是代理自动配置 (PAC)脚本旨在解决此问题。以下脚本将配置 Firefox,以便它透明地通过本地代理路由请求,而无需重写它们。将此文件保存在文件系统的某个位置,然后进入“连接设置”对话框并将路径放入“自动代理配置 URL”设置中。(所有主流浏览器都支持此功能,而不仅仅是 Firefox。)

function FindProxyForURL(url, host)
{
    return "com.ezproxy.its.uu.se";
}

这是一个 javascript 函数,因此条件逻辑也是可能的。

相关内容