2012-04-19 67 views
1

你好計算器社區小程序的Java功能的存在從JavaScript,您在IE9

我有一些代碼,幾乎所有的瀏覽器適用於除....(等待它)...... IE9(可能還有其他版本的IE?)。

所以,我已經添加了一個小程序到頁面,一切都很順利,但我想檢查一下,看applet是否被加載,所以要做到這一點,我一直在輪詢,看看函數中的小程序存在。

例如,假設我有我的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解決方法嗎?

感謝, -Oz

+0

我不反對這樣做,但我有點好奇,而其他瀏覽器都 – OzBarry 2012-04-19 14:06:51

+0

好吧,我不這樣想,這就是爲什麼IE9在這裏失敗。我必須接受的東西如果你可以添加這個答案我可以投票,謝謝! – OzBarry 2012-04-19 14:38:32

回答

3

我要檢查,看看是否小程序被加載,所以要做到這一點,我已經投票,看看是否存在於小應用程序的功能。

不這樣做。相反,讓小程序在init()的末尾調用JS函數。 init()的末尾是applet準備好的時候。

IE9在這裏失敗,其他瀏覽器不這樣做。

用'任何瀏覽器'代替IE9,並且你在applet/JRE/JS /瀏覽器交互掛鉤方面有小問題。不幸的是,這就是小程序的本質。 :(

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; 
}