gpt4 book ai didi

java - 从小程序调用 JS 在 Firefox 和 Chrome 中有效,但在 Safari 中无效

转载 作者:行者123 更新时间:2023-11-29 18:32:51 26 4
gpt4 key购买 nike

我在一个小程序中有以下代码来调用一些 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);
}

callJS 函数是:

window.callJS = function(divId, functionName, jsonArgString) {
var args, obj;
obj = $(divId).data('neatObject');
args = eval(jsonArgString);
return obj[functionName](args);
};

在 Firefox/Chrome 中,divIdfunctionName 参数包含有效的字符串并且一切正常;对卡在指定 DIV 数据上的对象调用所需的函数。

在 Safari 中,divIdfunctionName 参数都被报告为一个 JavaRuntimeObject,其值为 true

> divId
JavaRuntimeObject
true

什么给了?

最佳答案

并非所有浏览器都完全支持 LiveConnect。特别是,在使用 call 时,Safari 不会将 Java 字符串转换为等效的 prober JS。在您的情况下,您可以在 Applet 端使用 eval 而不是 call 并放入带有参数的 JSON 字符串对象。像这样的东西:

javascript.eval(callback + "({\"id\":\""+ id + "\",\" ... })")

基本上,您需要了解有效的 LiveConnect 的跨浏览器兼容子集。我写了一篇描述子集的博客文章:http://blog.aarhusworks.com/applets-missing-information-about-liveconnect-and-deployment/

它带有一个在浏览器中运行的 LiveConnect 测试套件:http://www.jdams.org/live-connect-test

关于java - 从小程序调用 JS 在 Firefox 和 Chrome 中有效,但在 Safari 中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6071601/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com