1
我有一個非常簡單的擴展,我想根據內容在上下文菜單上顯示一個新項目,這應該很簡單,並且有很多教程顯示了必須完成的操作。Firefox上下文菜單項不顯示
問題是,只要我在contecontentAreaContextMenu
上添加了我的新元素popupshowing
的偵聽器,即使我不隱藏它,它也不會顯示。
下面是XUL代碼:
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
<?xml-stylesheet href="chrome://Prot-On/skin/Prot-On.css" type="text/css"?>
<!DOCTYPE window SYSTEM "chrome://Prot-On/locale/Prot-On.dtd">
<overlay id="Prot-On" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="application/x-javascript" src="chrome://Prot-On/content/prot-on.js"/>
<popup id="contentAreaContextMenu">
<menuitem id="prot-on-main-item" label="Hello, world!" oncommand="proton.hello();"/>
</popup>
</overlay>
並且Prot-on.js:
var proton = {
init : function() {
try {
if (document.getElementById("contentAreaContextMenu")) {
document.getElementById("contentAreaContextMenu").addEventListener("popupshowing", this.showContextMenu, false);
}
} catch (e) {
this.manageException(e);
}
},
hello : function(){
try {
alert("Hello, world2!");
} catch (e) {
this.manageException(e);
}
},
showContextMenu : function (event){
try {
var show = document.getElementById("prot-on-main-item");
show.setAttribute("hidden", false);
} catch (e) {
this.manageException(e);
}
},
manageException : function (exception) {
window.openDialog(
"chrome://Prot-On/content/resources/html/showErrorBacktrace.htm",
"errorbacktrace",
"centerscreen=yes,chrome=yes,modal=yes,resizable=yes",
exception,
"display error"
);
}
}
try {
window.addEventListener("load", proton.init(), false);
} catch (e) {
proton.manageException(e);
}
如果我只是註釋掉這些行:
if (document.getElementById("contentAreaContextMenu")) {
document.getElementById("contentAreaContextMenu").addEventListener("popupshowing", this.showContextMenu, false);
}
一切正常,所以我不確定是什麼問題。
manageException函數只是顯示任何異常的附加信息及其正常工作,以防萬一您想知道。
我現在感覺讓人看見,這種愚蠢的事情。無論如何感謝您的解決方案。 – frisco