从小程序调用javascript方法时出错

从小程序调用javascript方法时出错,java,javascript,applet,Java,Javascript,Applet,我试图使用netscape.java.JSObject从小程序调用javascript方法 在小程序中: JSObject window = JSObject.getWindow(this.Class); Object[] args = .... //arguments window.call("javascriptMethodName", args); 但是我在window.call上得到了一个异常: JavaScript error while calling "callFromJ

我试图使用
netscape.java.JSObject
从小程序调用javascript方法

在小程序中:

JSObject window = JSObject.getWindow(this.Class); 
Object[] args = ....  //arguments 
window.call("javascriptMethodName", args); 
但是我在window.call上得到了一个异常:

JavaScript error while calling "callFromJava" netscape.javascript.JSException: JavaScript error while calling "callFromJava" at sun.plugin2.main.client.MessagePassingJSObject.newJSException(Unknown Source) at sun.plugin2.main.client.MessagePassingJSObject.waitForReply(Unknown Source) at sun.plugin2.main.client.MessagePassingJSObject.call(Unknown Source) at TextBoxApplet.jButton1_actionPerformed(TextBoxApplet.java:57) at TextBoxApplet.access$000(TextBoxApplet.java:16) at TextBoxApplet$1.actionPerformed(TextBoxApplet.java:36) at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.setPressed(Unknown Source) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) at java.awt.Component.processMouseEvent(Unknown Source) at javax.swing.JComponent.processMouseEvent(Unknown Source) at java.awt.Component.processEvent(Unknown Source) at java.awt.Container.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source) 调用“callFromJava”时发生JavaScript错误 netscape.javascript.JSException:调用“callFromJava”时发生javascript错误 位于sun.plugin2.main.client.MessagePassingJSObject.newJSException(未知源) 位于sun.plugin2.main.client.MessagePassingJSObject.waitForReply(未知源) 位于sun.plugin2.main.client.MessagePassingJSObject.call(未知源) 在TextBoxApplet.jButton1_执行操作(TextBoxApplet.java:57) 在TextBoxApplet.access$000(TextBoxApplet.java:16) 在TextBoxApplet$1.actionPerformed(TextBoxApplet.java:36) 在javax.swing.AbstractButton.fireActionPerformed(未知源) 位于javax.swing.AbstractButton$Handler.actionPerformed(未知源) 在javax.swing.DefaultButtonModel.fireActionPerformed(未知源) 位于javax.swing.DefaultButtonModel.setPressed(未知源) 位于javax.swing.plaf.basic.BasicButtonListener.mouseReleased(未知源代码) 位于java.awt.Component.ProcessMouseeEvent(未知源) 位于javax.swing.JComponent.ProcessMouseeEvent(未知源) 位于java.awt.Component.processEvent(未知源) 位于java.awt.Container.processEvent(未知源) 位于java.awt.Component.dispatchEventImpl(未知源) 位于java.awt.Container.dispatchEventImpl(未知源) 位于java.awt.Component.dispatchEvent(未知源) 位于java.awt.LightweightDispatcher.RetargetMouseeEvent(未知源) 位于java.awt.LightweightDispatcher.ProcessMouseeEvent(未知源) 位于java.awt.LightweightDispatcher.dispatchEvent(未知源) 位于java.awt.Container.dispatchEventImpl(未知源) 位于java.awt.Component.dispatchEvent(未知源) 位于java.awt.EventQueue.dispatchEvent(未知源) 位于java.awt.EventDispatchThread.pumpOneEventForFilters(未知源) 位于java.awt.EventDispatchThread.pumpEventsForFilter(未知源) 位于java.awt.EventDispatchThread.pumpEventsForHierarchy(未知源) 位于java.awt.EventDispatchThread.pumpEvents(未知源) 位于java.awt.EventDispatchThread.pumpEvents(未知源) 位于java.awt.EventDispatchThread.run(未知源)
JSObject
不是
null
。有人遇到过这种情况吗?
非常感谢

我做了一个快速测试,我的发现与作者的评论非常吻合

使用以下小程序:

public class MyClass extends JApplet {
    public void init() {
        JSObject window = JSObject.getWindow(this); 
        Object[] args = new String[] { "bar" }; 
        window.call("foo", args); 
    }
}
下面的标记(注意错误的JavaScript-我传递的
bar
参数中没有
baz
方法):

例如,如果我通过将
bar.baz()
替换为
alert(bar)
来修复JavaScript函数,那么一切都可以正常工作


长话短说-再看看您试图调用的JavaScript函数,以及小程序在调用时传递的参数。

在运行与JavaScript交互的小程序之前,还有一个要求。作为安全预防措施,除非网页作者(可能与小程序作者不同)明确授予小程序使用JavaScript的权限,否则不允许小程序使用JavaScript。要授予此权限,必须在HTML文件中的小程序标记中包含新的MAYSCRIPT属性

示例19.5显示了一个小程序片段,该小程序使用JavaScript显示警报对话框。成功编译此小程序后,可以将其包含在HTML文件中,并使用如下HTML代码:

如果您不记得包含MAYSCRIPT标记,小程序将不允许与JavaScript交互


我不知道答案,但我猜“JavaScript错误”意味着这是JavaScript代码中的错误。你能贴出来吗?我猜你是对的。我认为这是一个错误,想看看是否有人修复它<代码>函数callFromJava(comId){var textBox=document.getElementById(comId);textBox.setValue(“由小程序触发”);}我试图通过id获取af:inputText。什么样的元素是“textBox”?如果是or,请尝试使用textBox.value(“由小程序触发”)设置内容;默认情况下,它们没有“setValue”方法,而是af:inputText。我在这一点上是错误的,因为我把它当作html组件对待。在adf中,我需要使用AdfPage.page.findComponentByAbsoluteId(“”)。在1.6中不再需要MAYSCRIPT属性。看见
<html>
  <head>
    <title>MyAppletTest</title>
  </head>
  <body>
    <script type="text/javascript">
      function foo(bar) { bar.baz(); }
    </script>
    <applet code="MyApplet.class"></applet>
  </body>
</html>
netscape.javascript.JSException: JavaScript error while calling "foo"
    at sun.plugin2.main.client.MessagePassingJSObject.newJSException(Unknown Source)
    at sun.plugin2.main.client.MessagePassingJSObject.waitForReply(Unknown Source)
    at sun.plugin2.main.client.MessagePassingJSObject.call(Unknown Source)
    at MyApplet.init(MyApplet.java:13)