1

次のように呼び出される JMF ライブラリを使用するアプレットがあります。

<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 コードの 2 行目で、JavaScript コンソールにエラーがスローされます ( TypeError: cameraViewer.listDevices is not a function )。

この問題は、Firefox 8.0.1 で Windows 7 を使用している場合にのみスローされます。

このコードは次の場合に正常に機能するためです。

  • Windows 7 と Chrome
  • Windows 7 および Firefox 20
  • Windows XP および Firefox 8.0.1

この問題について何かアイデアはありますか !!?

4

1 に答える 1

2

まだロードされていないときに関数を呼び出そうとしていると思います(ブラウザはアプレットのロード時に異なる動作をします。同期的にロードするものとそうでないものがあります)。

関数を呼び出す前に関数が存在するかどうかを確認する方が安全です。存在しない場合は、ブラウザに数ミリ秒待機するように指示してください。

ここにあなたのためのモックコードがあります:

    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);
}
于 2013-04-30T16:17:20.360 に答える