Firefox扩展 - 在菜单栏中加载页面?

时间:2009-05-15 12:32:03

标签: firefox login google-chrome xul

我不确定这是否可行,部分原因是因为我不清楚术语会是什么......

我想创建一个扩展程序,除其他外,还有一个功能,当用户点击状态栏图标时,一个小窗口将滑出,该窗口内部将成为一个网站登录页面。当然,他们会正常登录,任何cookie或身份验证都会照常处理。

我不确定谷歌要找到合适的overlay / chrome函数/命名空间。另外,我不希望AJAX成为页面的源,我希望实际页面直接从服务器加载(出于安全原因)但是,我也想拦截用户在页面上看到的内容(类似于greasemonkey)风格,我猜)所以只有表单字段和头部显示,而不是任何“你忘记了密码”和什么不是信息。另外(我确定如果以上任何一种都是可能的,这应该也是这样),我想拦截服务器的响应,以便在它完成它需要做的事情之后(我不想惹事并且可能不会没有遇到麻烦)用户会看到“你做到了!”之类的东西。在同一个滑出窗口中,而不是服务器的常用输出。 (服务器实际输出一个javascript警报,它不会在扩展中很好地混合,然后将用户重定向到我不想要的主页。但我很有信心,如果我可以学习如何拦截输出我可以杀死那些位。)

所以我猜问题是: 有办法:

  1. 点击NON-MENU窗口,
  2. 在该窗口中加载实时网页,
  3. 修改实时页面的输出,同时仍然在网站上?
  4. 登录页面已加密,登录/密码被认为是绝密的,因此我必须尽可能地尊重安全性,而不是尝试更简单的技术,如ajax或cookie-moding。

    谢谢!

2 个答案:

答案 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的示例,它就是这样)。