1

スタックオーバーフロー コミュニティの皆様、こんにちは。

.... (それを待ってください).... IE9 (およびおそらく他のバージョンの IE?) を除く、事実上すべてのブラウザーで動作するコードがいくつかあります。

それで、ページにアプレットを追加しました。すべてうまくいきますが、アプレットがロードされているかどうかを確認したいので、アプレットの関数が存在するかどうかをポーリングしています。

たとえば、Java アプレットに次のメソッドがあるとします。

public int dummy( int a ) {
  return a + 1;
}

したがって、私の JavaScript では、関数が次のように存在するかどうかをポーリングして確認します (jquery を使用します。#applet はアプレット タグの ID です)。

var japp = $("#applet").get(0);
if( japp && japp.dummy ) {
  alert( japp.dummy(1) );
}

これは、少なくとも Chrome と Firefox では機能しますが、IE9 では機能しないことに気付くでしょう。

IE9 では、アクセス可能なメソッドに関係なく、japp.dummy常に戻りますundefined

IE9 の適切な回避策を知っている人はいますか?

ありがとう、-オズ

4

2 に答える 2

4

この方法で試してください:

<object id="idOfMyApplet" ... >
    <param> ... </param>
</object>


function testApplet() {
    var myApplet = document.applets.idOfMyApplet;
    if (!myApplet) {
        return false;
    }
    try {
        myApplet.publicTestMethod();
    } catch(ex) { 
        return false;
    }
    return true;
}

var retryCounter = 20;
var appletLoaded = false;

function waitForApplet() {
    if (!testApplet()) {
        if (retryCounter > 0) {
            retryCounter--;
            setTimeout("waitForApplet()", 500);
        }
        return false;
    }
    appletLoaded = true;
    return true;
}
于 2012-08-21T10:50:06.937 に答える
3

アプレットがロードされているかどうかを確認したいので、そのために、アプレットの関数が存在するかどうかをポーリングしています。

そうしないでください。代わりに、アプレットが の最後で JS 関数を呼び出すようにしますinit()init()アプレットの準備ができたら終了です。

ここで IE9 は失敗しますが、他のブラウザーでは失敗しません。

IE9 を「任意のブラウザー」に置き換えると、アプレット/JRE/JS/ブラウザーの相互作用が固定されているという厄介な問題が発生します。残念ながら、それがアプレットの性質です。:(

于 2012-04-19T14:49:18.180 に答える