我不确定这是否可行,部分原因是因为我不清楚术语会是什么......
我想创建一个扩展程序,除其他外,还有一个功能,当用户点击状态栏图标时,一个小窗口将滑出,该窗口内部将成为一个网站登录页面。当然,他们会正常登录,任何cookie或身份验证都会照常处理。
我不确定谷歌要找到合适的overlay / chrome函数/命名空间。另外,我不希望AJAX成为页面的源,我希望实际页面直接从服务器加载(出于安全原因)但是,我也想拦截用户在页面上看到的内容(类似于greasemonkey)风格,我猜)所以只有表单字段和头部显示,而不是任何“你忘记了密码”和什么不是信息。另外(我确定如果以上任何一种都是可能的,这应该也是这样),我想拦截服务器的响应,以便在它完成它需要做的事情之后(我不想惹事并且可能不会没有遇到麻烦)用户会看到“你做到了!”之类的东西。在同一个滑出窗口中,而不是服务器的常用输出。 (服务器实际输出一个javascript警报,它不会在扩展中很好地混合,然后将用户重定向到我不想要的主页。但我很有信心,如果我可以学习如何拦截输出我可以杀死那些位。)
所以我猜问题是: 有办法:
登录页面已加密,登录/密码被认为是绝密的,因此我必须尽可能地尊重安全性,而不是尝试更简单的技术,如ajax或cookie-moding。
谢谢!
答案 0 :(得分:3)
这是一个例子:
首先创建一个xul叠加层(login.xul),其中包含一个iframe元素,用于显示您的登录页面:
<?xml version="1.0"?>
<overlay id="login-window-vb" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<window id="main-window">
<vbox>
<iframe id="login-frame" src="http://yoursite.com/custom-login" style="display:none;">
</iframe>
</vbox>
</window>
</overlay>
请注意,我将显示样式设置为“none”,这样我们只有在用户点击状态栏中的“登录”图标时才能显示iframe。
然后在清单文件中注册此叠加层:
content yourextension chrome/content/
overlay chrome://browser/content/browser.xul chrome://yourextension/content/login.xul
然后添加另一个将在状态栏中显示登录图标的叠加层:
<?xml version="1.0"?>
<overlay id="login-status" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="application/x-javascript">
function ShowLogin() {
// get the login iframe and display it
var loginBox = document.getElementById('login-frame');
loginBox.style.display = "";
loginBox.height = "200px";
}
</script>
<statusbar id="status-bar">
<statusbarpanel id="login-icon" image="" label="Login" oncommand="ShowLoginBox()" />
</statusbar>
</overlay>
并以与前一个相同的方式注册此叠加层。
现在,iframe将从服务器显示您的登录页面,它将注册cookie 。我认为任何Greasmonkey脚本也会到达这个iframe。
答案 1 :(得分:0)
对于#1,查找显示“Firefox应该记住此密码吗?”的代码。
我不确定#2,但由于Firefox中的主要HTML窗口也是XUL,我不明白为什么不应该这样。
3号有点棘手。首先,网站一直在变化,那么您打算如何知道要过滤哪个部分?在页面加载时更改DOM没有问题(查看Greasemonkey的示例,它就是这样)。