在我的工作中,他们在内部网页上使用“中央登录”工具。每当内部网页需要身份验证时,它会将您转发到中央登录,登录后,它会将您发送回您尝试查看的页面。
此中央登录页面的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,因此不存在。不,我不能与负责中央登录页面的人交谈并让他们改变它。由于页面的性质,代理也可能非常困难。
提前致谢!
答案 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。它基本上是在做什么@Tatu Lahtela suggested和@alex suggested,只是没有apache。
以下是我采取的步骤:
在我的文本编辑器中,我找到了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);
}
在Fiddler的工具 - &gt;选项 - &gt;连接标签下,点击“复制浏览器代理配置网址”(这是@Tatu Lahtela提到的代理PAC文件)。
我修改了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
。