[英]Passing an arbritrary JavaScript object in Xul
我遵循此示例将对象传递给窗口,但是当它作为参数时,其值为“未定义”。
这是我的第一个窗口(OBS 转储打印到控制台时的方式。 调试选项被打开):
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<!DOCTYPE window SYSTEM "chrome://XulWindowArgTest/locale/XulWindowArgTest.dtd">
<window id="windowID" width="400" height="300"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script>
<![CDATA[
function onClickMe(event) {
dump("begin\n");
try {
var args = {
param1: true,
param2: 42
};
args.wrappedJSObject = args;
var watcher = Components.classes["@mozilla.org/embedcomp/window-watcher;1"].getService(Components.interfaces.nsIWindowWatcher);
watcher.openWindow(null, "chrome://XulWindowArgTest/content/about.xul", "windowName", "chrome", args);
} catch (e) {
dump("error: " + e + "\n");
}
dump("end\n");
}
]]>
</script>
<button label="Click me !" oncommand="onClickMe();" />
</window>
我的第二个窗口:
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<!DOCTYPE window SYSTEM "chrome://XulWindowArgTest/locale/XulWindowArgTest.dtd">
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
onload="onload()">
<script>
<![CDATA[
function onload() {
dump('arg = ' + window.arguments[0].wrappedJSObject + "\n");
}
]]>
</script>
<label value="test" />
</window>
当第二个窗口加载时,它调用onload并打印:
arg =未定义
知道如何解决吗?
我通常调用openDialog,因此可以不使用观察程序而直接传递一个或多个参数...但是从您尝试遵循的示例中,似乎您省略了这一行:
args.wrappedJSObject = args;
如果您尝试全部以内联方式进行操作,则可能应该通过:
{wrappedJSOBject:["myarg"]}
此外,在第二个窗口中,您尝试打印
window.arguments[0].wrappedJSObjectarg
当您的示例引用时
window.arguments[0].wrappedJSObject;
我假设前者是一个疏忽,而后者是一个错字。
另外,您可能需要确保在加载窗口之后才检查参数-在由窗口的onload属性调用的函数中检查参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.