2013-04-30 28 views
1

我已经使用JMF库的小应用程序,这样调用:呼叫Applet.getMethod()的JavaScript抛出错误信息:类型错误:Applet.getMethod()不是一个函数

<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控制台抛出(类型错误:cameraViewer.listDevices不是函数)。

当我使用Windows 7与Firefox 8.0.1

因为这个代码工作正常这个问题只抛出:

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

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

回答

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); 
} 
+0

谢谢你给了我一个想法,使用睡眠方法的答案。 所以在我的情况下,我用try catch块鼓励了这个问题,当捕获异常时,我用(setTimeout方法)在somme毫秒之后重新调用我的函数。 – morjane 2013-04-30 17:52:44

相关问题