创建Firefox插件即时修复损坏的网页

时间:2011-05-11 16:42:20

标签: html firefox firefox-addon

在我的工作中,他们在内部网页上使用“中央登录”工具。每当内部网页需要身份验证时,它会将您转发到中央登录,登录后,它会将您发送回您尝试查看的页面。

此中央登录页面的HTML中的第一行以此开头:

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

从不结束评论,这意味着整个文档中的所有HTML代码实际上已被注释掉。这在IE6(这是公司标准 - eek!)中运行良好,它曾经在Firefox中工作,但是当我升级到Firefox 4时,它不再有用(因为它不应该 - 它遵循标准)。< / p>

我保存了源代码并将第一行更改为:

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

然后页面会显示,但由于它是从file:///加载的,我无法将我的凭据提交给主服务器......

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

是否有可能创建一个Firefox插件(甚至是Greasemonkey脚本)来修改HTML,因为它在呈现之前会进入浏览器?我看到大量的示例在加载后修改HTML,但在加载时无法找到任何操作的内容。

我想除了插件外,我对其他解决方案持开放态度,但这是我唯一能想到的。此外,我们不允许使用Chrome或Safari,因此不存在。不,我不能与负责中央登录页面的人交谈并让他们改变它。由于页面的性质,代理也可能非常困难。

提前致谢!

4 个答案:

答案 0 :(得分:1)

也许使用mod_proxy和mod_subsitute的本地Apache可以用于此吗?源自berkek.com的示例:

<VirtualHost *>
  ServerAdmin postmaster@yourcorp.com
  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>

答案 1 :(得分:1)

这是我找到的方法:

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

以下是我采取的步骤:

  1. Download并安装Fiddler
  2. 运行Fiddler,侦听端口8888(默认情况下)
  3. 在Fiddler选项(HTTPS标签)中,选中“解密HTTPS流量”框
  4. 在Fiddler中,单击“规则”菜单,然后单击“自定义规则”。
  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. 在Fiddler的工具 - &gt;选项 - &gt;连接标签下,点击“复制浏览器代理配置网址”(这是@Tatu Lahtela提到的代理PAC文件)。

  7. 在Firefox,工具 - &gt;选项 - &gt;高级标签 - &gt;网络标签 - &gt;设置中,选中“自动代理配置网址并粘贴步骤6中的网址。
  8. 浏览网页!
  9. 我修改了PAC文件以限制像@Tatu Lahtela建议的那样去Fiddler的网站。

    这适用于我,只需最少的设置。一个Firefox插件对我来说会更好,因为我不需要使用外部程序,但构建一个这样做似乎相当困难。

    感谢所有帮助过的人!我将@Tatu Lahtela的答案标记为已接受的答案,因为这样我就能找到我需要的答案。

答案 2 :(得分:0)

您不使用代理的原因是什么?

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

答案 3 :(得分:0)

你可以在Firefox插件中执行此操作,但这是相当多的工作。 http://www.softwareishard.com/blog/firebug/nsitraceablechannel-intercept-http-traffic/向您展示了该做什么,除了只是获取传入的数据,将其存储在一个数组中,然后将其发送回originalListener,您需要发送修改后的数据(在您的情况下,添加了-->的数据)到originalListener