【问题标题】:Firefox Extension -- Load page in menu bar?Firefox 扩展——在菜单栏中加载页面?
【发布时间】:2009-05-15 12:32:02
【问题描述】:

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

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

我不确定 Google 用什么来找到正确的叠加层/chrome 函数/命名空间。另外,我不想对页面的源进行 AJAX,我希望直接从服务器加载实际页面(出于安全原因)但是,我还想拦截用户在页面上看到的内容(类似于油脂猴风格,我猜)所以只有表单字段和头部出现,而不是任何“你忘记密码了吗”以及什么不是信息。 ALSO(我确定如果上述任何一项都是可能的,这也应该是),我想拦截服务器的响应,以便在它完成它需要做的事情之后(我不想搞砸并且可能会遇到麻烦)用户会看到类似“你做到了!”的内容。在同一个滑出窗口中,而不是服务器通常的输出。 (服务器实际上输出了一个 javascript 警报,它不能很好地融入扩展程序,然后将用户重定向到我也不想要的主页。但我非常有信心,如果我能学会如何拦截输出我可以杀了那些位。)

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

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

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

谢谢!

【问题讨论】:

    标签: firefox login google-chrome xul


    【解决方案1】:

    这是一个例子:

    首先创建一个 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。

    【讨论】:

    • 在 Mozilla 网站上的文档中,它说 iframe(在扩展中)的 DOM 是只读的。 Greasemonkey 会破解吗?我希望使用像 greaskemonkey 这样的本土产品,因此避免让用户为一个相当轻量级的应用程序下载大量的东西。谢谢你的样品,顺便说一句!
    • 我曾经开发过一个firefox扩展,我可以毫无问题地修改iframe的内容。尝试将 iframe 的属性类型设置为“content-targetable”
    • @Anthony:iframe 仅对于 HTML 附带的 JavaScript 是不可变的。它不适用于 XUL 的 JS。
    【解决方案2】:

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

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

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

    【讨论】:

    • 有问题的网站已经 8 年没有改变了,即使改变了,我们的目标确实是为我们的办公室创建一个插件,以避免在工作流程中丢失我们的 cookie,所以即使发生了变化戏剧性地,它不会太分散以至于无法更新。大多数情况下,我希望从状态栏中可以使用登录屏幕,但由于它会发出警报和重定向,这几乎与在另一个选项卡中访问该站点一样糟糕。
    猜你喜欢
    • 2012-05-12
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2017-11-11
    • 2012-09-14
    • 2017-12-27
    • 1970-01-01
    • 2011-09-11
    相关资源
    最近更新 更多