Java小程序调用javascript函数返回值

Java Applet calling javascript function with return value

本文关键字:函数 返回值 javascript 调用 程序 Java      更新时间:2023-09-26

我一直在努力理解这一点。我哪里搞砸了,请帮帮我。

类似于调用这个url:http://www.codejava.net/java-se/applet/call-javascript-function-from-java-applet

我从Java Applet的init和start方法中调用浏览器。

Javascript如下:

function getHHandler() {
    console.log("handler requested from applet");
    return HHandler.handler();
}
HHandler.instance = null;
function HHandler() {
    ...
}
HHandler.prototype = {
    doStuff : function() {
    }    
};
HHandler.handler = function() {
    if(HHandler.instance == null)
        HHandler.instance = new HHandler();
    return jsb.instance;
};

这是我在applet中准备调试的方法——没有什么花哨的,至少它应该是:

private Object getHandlerObject() {
    Object jo = browser.call("getHHandler", null);
    log("call getJSBHandler():" + jo);
    return jo;
}

我已经看过了oracle的例子,无数的网站,教程,文档和所有指向相同的调用和eval方法。

当applet调用javascript函数getHHandler时发生的情况是——我可以在浏览器中看到控制台日志,看到操作确实发生了,但是javascript的返回语句从未返回到Java代码中。所以Java剩下了一个空对象,我用不到。我甚至仔细检查了一下,以确保在返回语句之前,js变量不是空的。

我能理解为什么browser.call("HHandler。处理程序",null);会异常并抛出notfunction异常,但在这种情况下,一切似乎都很顺利,但是返回值。
<applet id="appletId" archive="../path/to/applet.jar" code=com.package.Main.class width="1" height="1" mayscript></applet>

applet是自签名还是不签名都没有关系。添加了Mayscript——这并没有什么区别。

任何建议/输入?

您使用的是哪个Java版本?最近,* * *改变了applet中的很多东西。所有applet都需要使用官方证书进行签名(自签名是不够的)。还可以查看自1945年以来LiveConnect的变化。

现在

a)使用官方证书或

b)如果您使用最新的Java,请尝试旧的,看看它是否有效。如果是这样的话,你知道从哪里开始…