2011-05-11 95 views
11

在我的工作中,他们在内部网页上使用“中央登录”功能。无论何时内部网页需要验证,它都会将您转到中央登录页面,登录后会将您发送回您尝试查看的页面。创建Firefox插件来即时修复损坏的网页

在HTML该中心登录页面的第一行开始与此:

<!-- Encoding=ISO-8859-1; 

从未结束评论,这意味着整个文档中的所有HTML代码实际上评论出。这在IE6(这是公司标准 - eek!)中工作正常,并且它曾经在Firefox中工作,但是当我升级到Firefox 4时,这不再起作用(因为它不应该 - 它遵循标准)。

我已保存的源,改变了第一行:

<!-- Encoding=ISO-8859-1; --> 

然后页面上会显示,但因为它是从file:///加载,我无法提交我的凭据到主服务器。 ..

我讨厌使用IE6,但对于所有内部页面,我坚持使用它,因为每次我发送到中央登录时,Firefox都呈现空白页面。

是否有可能创建Firefox插件(甚至是Greasemonkey脚本)来修改HTML,因为它在呈现之前进入浏览器?我看到很多修改HTML的例子,一旦它已经被加载,但找不到任何东西来操纵,而加载它的则是

我想我可以接受除插件外的其他解决方案,但这是我唯一能想到的。此外,我们也不允许使用Chrome或Safari,因此无法使用。不,我不能和负责中央登录页面的负责人交谈,让他们改变它。由于页面的性质,代理可能也非常困难。

提前致谢!

+3

真是一团糟:)我喜欢它,+1 – Henry 2011-05-11 16:44:13

+2

+1出于同情。真是一团糟。 – delnan 2011-05-11 16:45:47

+2

@亨利和@德南 - 我很欣赏这种同情。这很有趣,因为其他门票已经被其他黑羊(Firefox用户)打开,标准响应是“使用标准浏览器”(IE6)。实际上,现在我想起来并没有那么热闹...... – BrianH 2011-05-11 16:54:57

回答

1

也许一个本地的Apache mod_proxy和mod_subsitute可以用于这个?从一个例子来源于berkek.com

<VirtualHost *> 
    ServerAdmin [email protected] 
    ServerName www.yourcompany.com 
    <Proxy *> 
    Order deny,allow 
    </Proxy> 
    ProxyRequests on 
    ProxyPass/http://www.yourcompany.com/ 
    ProxyPassReverse/http://www.yourcompany.com/ 
    AddOutputFilterByType SUBSTITUTE text/html 
    Substitute "s|<!-- Encoding=ISO-8859-1;|<!-- Encoding=ISO-8859-1; -->|n" 
</VirtualHost> 
+0

我不知道ProxyPassReverse,所以也许这会起作用。对我之前回答的评论 - 不会代理缓慢我所有的浏览下来,只是为了修复1登录页面? (当然,自从我在IE6以来,我的浏览是一种可怕的体验) – BrianH 2011-05-11 19:49:53

+0

当然,您可以将浏览器配置为仅在需要此修复程序的站点上使用代理。见例如[proxy pac file](http://en.wikipedia.org/wiki/Proxy_auto-config) – 2011-05-11 20:06:30

+0

pac文件运行良好。但是,我无法让替代工作。我安装了XAMPP并添加了一个带有替代线的虚拟主机。它服务于页面,但不会替代。我甚至做了's | a | BLAH | ni'的替代品,但它仍然行不通。发现很多文档,但似乎没有任何工作。 – BrianH 2011-05-12 14:23:50

0

你没有使用代理的原因是什么?

Apache的httpd + mod_proxy + mod_ext_filter应该可以轻松解决您的问题;你使用mod_ext_filter来插入一个程序来修复页面(小shell脚本应该这样做)。

+0

嗯 - 我真的不希望我的所有浏览都是通过代理 - 只需要一页(登录页面)。 mod_ext_filter会不会减慢我的浏览速度? (不太熟悉) – BrianH 2011-05-11 19:48:35

+0

mod_proxy w/ProxyPass和ProxyPassReverse不是通用代理。您访问http:// newapacheserver /路径并将请求发送到http:// borkedappserver /路径,您不必在浏览器中配置代理。 – alex 2011-05-12 18:26:53

1

下面是一个方法,我发现:

Fiddler Web Debugging Proxy。它基本上是做什么@Tat​​u Lahtela suggested和什么@alex suggested,只有没有apache。

下面是我所采取的步骤:

  1. Download并安装小提琴手
  2. 运行提琴手,监听8888端口(默认)
  3. 在提琴手选项(HTTPS选项卡),检查“解密HTTPS流量”框
  4. 在提琴手中,单击规则菜单,然后单击自定义规则。
  5. 在我的文本编辑器,我发现OnBeforeResponse功能,并添加以下代码:

    if (oSession.oResponse.headers.ExistsAndContains("Content-Type", "html")){ 
        // Remove any compression or chunking  
        oSession.utilDecodeResponse(); 
    
        var oBody = System.Text.Encoding.UTF8.GetString(oSession.responseBodyBytes); 
    
        var oRegEx = /<!-- Encoding=ISO-8859-1; /gi; 
        oBody = oBody.replace(oRegEx, "<!-- Encoding=ISO-8859-1; -->"); 
    
        oSession.utilSetResponseBody(oBody); 
    } 
    
  6. 在提琴手,工具 - >选项 - >连接选项卡下,单击“复制浏览器代理配置URL”(这是@Tatu Lahtela提到的代理PAC文件)。

  7. 在Firefox中,工具 - >选项 - >高级标签 - >网络标签 - >设置,勾选“自动代理配置URL和步骤6#的URL粘贴。
  8. 网上冲浪!

我修改了PAC文件来限制去提琴手像@Tatu Lahtela建议的网站。

这对我的作品,以最少的设置而Firefox的插件将是对我好,因为我也不会用一个外部程序,但建立一个这样做似乎很难。

感谢大家帮助!我会将@Tatu Lahtela的答案标记为公认的答案,因为这是我能够找到我所需要的。