2

我不确定这是否可能,部分原因是我不知道术语是什么......

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

我不确定谷歌如何找到正确的覆盖/镀铬功能/命名空间。另外,我不想对页面的源进行 AJAX,我希望直接从服务器加载实际页面(出于安全原因)但是,我还想拦截用户在页面上看到的内容(类似于油脂猴风格,我猜)所以只有表单字段和头部出现,而不是任何“你忘记密码了吗”以及什么不是信息。ALSO(我确定如果上述任何一项都是可能的,这也应该是),我想拦截服务器的响应,以便在它完成它需要做的事情之后(我不想搞砸并且可能会遇到麻烦)用户会看到类似“你做到了!”的内容。在同一个滑出窗口中,而不是服务器通常的输出。

所以我想问题是:有没有办法:

  1. 有一个非菜单窗口在点击时滑出,
  2. 在该窗口中加载实时网页,然后
  3. 修改实时页面的输出,同时仍然保留在网站上?

登录页面是加密的,登录/密码被认为是绝密的,所以我必须尽可能地尊重安全性,而不是尝试更简单的技术,如 ajax 或 cookie-moding。

谢谢!

4

2 回答 2

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>

请注意,我将显示样式设置为“无”,以便我们仅在用户单击状态栏中的登录图标时才能显示 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。

于 2009-05-15T13:57:16.600 回答
0

对于 #1,查找显示“Firefox 应该记住这个密码吗?”的代码。

我不确定#2,但由于 Firefox 中的主 HTML 窗口也是 XUL,我不明白为什么这不可能。

3号有点棘手。首先,网站一直在变化,那么您打算如何知道要过滤掉哪一部分呢?在页面加载时更改 DOM 没有问题(以 Greasemonkey 为例,它就是这样做的)。

于 2009-05-15T12:59:25.040 回答