Ошибка при вызове метода javascript из апплета - PullRequest
3 голосов
/ 17 июня 2010

Я пытаюсь вызвать метод javascript из апплета, используя netscapte.java.JSObject.

в апплете:

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)

JSObject НЕ null. Кто-нибудь сталкивался с этим? Большое спасибо.

Ответы [ 2 ]

2 голосов
/ 18 июня 2010

Я сделал быстрый тест, и мои результаты хорошо коррелируют с комментариями musicfreak .

Со следующим апплетом:

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:

<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)

Если я исправлю свойФункция JavaScript, например, заменив bar.baz() на alert(bar), все работает нормально.

Короче говоря, еще раз - взгляните на функцию JavaScript, которую вы пытаетесь вызвать, а также параметры, которые передает ваш апплет.вызов.

0 голосов
/ 26 декабря 2012

Существует еще одно требование, прежде чем вы сможете запустить апплет, который взаимодействует с JavaScript.В качестве меры безопасности апплетам не разрешается использовать JavaScript, если только автор веб-страницы (который может отличаться от автора апплета) явно не дает разрешение апплету сделать это.Чтобы дать это разрешение, вы должны включить новый атрибут MAYSCRIPT в тег апплета в файле HTML.

В примере 19.5 показан фрагмент апплета, который использовал JavaScript для отображения диалогового окна предупреждения.После того, как вы успешно скомпилировали этот апплет, вы можете включить его в файл HTML с кодом HTML, например:

Если вы не забудете включить тег MAYSCRIPT, апплет не сможет взаимодействовать с JavaScript.

http://docstore.mik.ua/orelly/web/jscript/ch19_06.html

...