我们有一个遗留的Web应用程序。在不同的地方,它会在Firefox上的Privilege Manager的帮助下打开一个窗口,以获得所需的结果。 其中一些窗口打开Java小程序或PDF文档。 客户端计算机正在更新Firefox,并且特权管理器不见了。HTML瞬态模态窗口
最简单的方法是什么? 的问题是:
必须有只有一个人时弹出的实例。这可以通过在
window.open()
呼叫上选择适当的窗口名称来完成。如果再次打开窗口(通过用户操作),它不应该重新加载,而只是集中将它放到前台(我已经看到我可以保留对JavaScript的引用来做到这一点)
- 它基本上必须是临时的/模态的,这样客户端才能在不关闭子窗口的情况下不离开当前页面或重新加载或与父窗口进行任何其他类型的交互(除了打开/重新对焦子窗口)。我不知道该怎么做。
有没有人有一个想法如何做到这一点?
在Linux上,客户端只是Firefox(它在特殊的信息亭配置中工作)。
我读了一些地方,我可以以某种方式写一个扩展名,但我基本上无法知道扩展和它的API。
EDIT1:
的(简化的)遗留码为例。不确定是否需要所有权限,但是这是它:此函数打开一个窗口,该窗口保留在父窗口之上,并阻止用户与父窗口进行任何交互。
function fWindowOpen(url, name) {
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite");
netscape.security.PrivilegeManager
.enablePrivilege("CapabilityPreferencesAccess");
netscape.security.PrivilegeManager
.enablePrivilege("UniversalPreferencesWrite");
netscape.security.PrivilegeManager
.enablePrivilege("UniversalPreferencesRead");
netscape.security.PrivilegeManager.enablePrivilege("UniversalFileRead");
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
window.open(
url,
name,
"screenX=70,dependent=yes,menubar=0,toolbar=0,width=900,height=700,modal=1,dialog=1"
);
}
function fnCapture(){
fWindowOpen("/path/to/document_or_japplet/page","_blank");
}
HTML:
<button value="Capture" property="btnCapture" onclick="javascript:fnCapture();"/>
EDIT2:溶液
在典型的扩展,在第XUL代码,定义该JavaScript代码:
var dialogExt = {
listener: function(evt) {
// Do work with parameters read through evt.target.getAttribute("attribute_name")
window.openDialog(evt.target.getAttribute("url"), evt.target.getAttribute("name"), evt.target.getAttribute("features"));
}
}
// from examples
document.addEventListener("dialogExtEvent", function(e){ dialogExt.listener(e); }, false, true);
然后,在网络上页码:
var element = document.createElement("dialogExtElement");
element.setAttribute("url", url);
element.setAttribute("name", name);
element.setAttribute("features", features);
document.documentElement.appendChild(element);
var evt = document.createEvent("Events");
evt.initEvent("dialogExtEvent", true, false);
element.dispatchEvent(evt);
现在,也许我错过了一些安全检查,以便代码在源自同一主机的情况下可以正常工作,以及如何处理对话框窗口与对话窗口之间的交互方式以请求对话框的文档的引用。
你能发表一个旧代码在做什么的例子吗?并且会在模态对话框可以接受的情况下自动关闭失焦? – the8472 2015-03-13 17:33:59
我已经添加了一个简化的遗留代码示例。不知道失去焦点时自动关闭。我想如果他在孩子窗口上做了一些工作,这可能会成为用户的一个谜,但对我来说这似乎是一个可行的妥协。一个实际的瞬态/模式窗口将是更可取的,但如果我知道如何使用扩展完成它以及如何在html文档/ javascript和扩展之间进行交互。 – dabicho 2015-03-13 18:23:39
您是否真的需要**新窗口来模拟Firefox *的全部内容,或者只是您所在的页面/您控制的页面?如果您只能为您所在的页面或您控制的网页使用模式,则不需要提升特权。如果它只是您控制的页面的模式,那么可以使用普通的非特权JavaScript来完成。 – Makyen 2015-03-13 20:36:26