这是一个例子:
首先创建一个 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。