我在小程序中有以下代码来调用一些 Javascript(这有点复杂,因为调用的 fn 从 divId 标识的 DOM 中获取一个对象,并在其上调用一个函数)。
@Override
public final void start() {
System.err.println("start() method called");
this.javascript = JSObject.getWindow(this);
this.jsObjectDivId = getParameter("parent_div_id");
this.initCallbackFnName = getParameter("init_callback");
Object args[] = {this.jsObjectDivId, this.initCallbackFnName};
System.out.print("Calling init_callback\n");
this.javascript.call("callJS", args);
}
The callJS
函数是:
window.callJS = function(divId, functionName, jsonArgString) {
var args, obj;
obj = $(divId).data('neatObject');
args = eval(jsonArgString);
return obj[functionName](args);
};
在 Firefox/Chrome 中divId
and functionName
参数包含有效的字符串,一切正常;在挂有指定 DIV 数据的对象上调用所需的函数。
在 Safari 中,divId
and functionName
参数均报告为JavaRuntimeObject
值为true
.
> divId
JavaRuntimeObject
true
是什么赋予了?
并非所有浏览器都完全支持 LiveConnect。特别是,在使用时,Safari 不会将 Java 字符串转换为探测器 JS 等效项call
。在你的情况下你可以只使用eval
在Applet端而不是call
并放入带有参数的 JSON 字符串对象。就像是:
javascript.eval(callback + "({\"id\":\"" + id + "\",\"
... })")
基本上,您需要了解有效的 LiveConnect 的跨浏览器兼容子集。
我写了一篇博客文章来描述该子集:http://blog.aarhusworks.com/applets-missing-information-about-liveconnect-and-deployment/ http://blog.aarhusworks.com/applets-missing-information-about-liveconnect-and-deployment/
它附带了一个在浏览器中运行的 LiveConnect 测试套件:http://www.jdams.org/live-connect-test http://www.jdams.org/live-connect-test
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)