簡體   English   中英

如何等待Java applet在Safari上完成加載?

[英]How to wait for a Java applet to finish loading on Safari?

這在Safari中不起作用:

<html>
<body>
<applet id="MyApplet" code="MyAppletClass" archive="MyApplet.jar">
<script type="text/javascript">
   alert(document.getElementById('MyApplet').myMethod);
</script>
</body>
</html>

myMethod是在MyAppletClass聲明的公共方法。

當我第一次在Safari中加載頁面時,它會在applet加載完成之前顯示警報(因此消息框顯示為undefined )。 如果我刷新頁面,則applet已經加載,並且警報會顯示function myMethod() { [native code] } ,正如您所期望的那樣。

當然,這意味着applet方法在加載之前不可用,但Safari並沒有阻止JavaScript運行。 <body onLoad>同樣的問題。

我需要的是像<body onAppletLoad="doSomething()"> 我該如何解決這個問題?

謝謝

PS:我不確定它是否相關,但JAR已簽署。

我使用一個計時器,在它放棄之前重置並保持多次檢查。

<script language="text/javascript" defer>

function performAppletCode(count) {
    var applet = document.getElementById('MyApplet');

    if (!applet.myMethod && count > 0) {
       setTimeout( function() { performAppletCode( --count ); }, 2000 );
    }
    else if (applet.myMethod) {
       // use the applet for something
    }
    else {
       alert( 'applet failed to load' );
    }
}  

performAppletCode( 10 );

</script>               

請注意,這假定applet將在Safari中運行。 我有一些實例,其中一個applet需要Java 6,即使使用與上面類似的代碼,也只需掛起Safari。 我選擇在服務器上進行瀏覽器檢測,並在瀏覽器不支持applet時將用戶重定向到錯誤頁面。

這是我寫的一個通用函數:

/* Attempt to load the applet up to "X" times with a delay. If it succeeds, then execute the callback function. */
function WaitForAppletLoad(applet_id, attempts, delay, onSuccessCallback, onFailCallback) {
    //Test
    var to = typeof (document.getElementById(applet_id));
    if (to == "function") {
        onSuccessCallback(); //Go do it.
        return true;
    } else {
        if (attempts == 0) {
            onFailCallback();
            return false;
        } else {
            //Put it back in the hopper.
            setTimeout(function () {
                WaitForAppletLoad(applet_id, --attempts, delay, onSuccessCallback, onFailCallback);
            }, delay);
        }
    }
}

像這樣稱呼它:

WaitForAppletLoad("fileapplet", 10, 2000, function () {
    document.getElementById("fileapplet").getDirectoriesObject("c:/");
}, function () {
    alert("Sorry, unable to load the local file browser.");
});

我前段時間遇到了類似的問題,將MAYSCRIPT添加到applet標簽解決了我的問題。

看一下這個頁面: http//www.htmlcodetutorial.com/applets/_APPLET_MAYSCRIPT.html

希望能幫助到你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM