使用javascript调用Applet.getMethod()抛出错误消息:TypeError:Applet.getMethod()不是函数

时间:2013-04-30 11:18:19

标签: javascript firefox windows-7 applet jmf

我有一个使用JMF库的applet,如下所示:

<object id="cameraViewer"
    classid="java:MyApplet.class"
    type="application/x-java-applet"
    archive="myapplet.jar" height="197" width="159"
    align="middle" codebase=".">
    <param name="code"
        value="MyApplet" />
    <param NAME="MAYSCRIPT" VALUE="true" />
    <param name="appletWidth" value="250" />
    <param name="appletHeight" value="200" />
    <param name="archive" value="myapplet.jar" />
    <param name="JAVA_CODEBASE" value="." />
    <font color="red">Applet error</font>
</object>

然后我调用了一个javascript函数:

var cameraViewer = document.getElementById('cameraViewer');
var deviceList = new Array(cameraViewer.listDevices());

在第二行javascript代码中,javascript控制台中会抛出错误( TypeError:cameraViewer.listDevices不是函数)。

仅当我将Windows 7与Firefox 8.0.1一起使用时才会抛出此问题

因为此代码适用于:

  • Windows 7和Chrome
  • Windows 7和Firefox 20
  • Windows XP和Firefox 8.0.1

你对这个问题有任何想法!!?

1 个答案:

答案 0 :(得分:2)

我认为你正试图调用该函数,但它仍然没有加载(浏览器在applet加载时表现不同,有些同步加载,而其他不加载)。

在尝试调用函数之前检查函数是否存在会更安全,如果没有,请告诉浏览器等待几毫秒。

这是一个模拟代码:

    var cameraViewer = document.getElementById('cameraViewer');

    if (typeof(cameraViewer.listDevices) != "undefined") { 
    // safe to use the function
    var deviceList = new Array(cameraViewer.listDevices());
}
else{
  setTimeout(function() {
    var deviceList = new Array(cameraViewer.listDevices());
  }, 1000);
}