我們有一個遺留的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