1

你好 stackoverflow 社区,

我有一些代码几乎可以在所有浏览器上运行,除了....(等等).... IE9(可能还有其他版本的 IE?)。

所以,我在页面中添加了一个小程序,一切顺利,但我想检查小程序是否已加载,为此,我一直在轮询小程序中的功能是否存在。

例如,假设我的 java 小程序中有这个方法:

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

所以在我的javascript中,我轮询该函数是否存在(使用jquery,其中#applet是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

我想检查小程序是否已加载,为此,我一直在轮询以查看小程序中的功能是否存在。

不要那样做。相反,让小程序在init(). 结束init()是小程序准备就绪的时候。

IE9 在这里失败,而其他浏览器没有。

用“任何浏览器”替换 IE9,您就会遇到与 applet/JRE/JS/浏览器交互挂钩的琐碎问题。不幸的是,这就是小程序的本质。:(

于 2012-04-19T14:49:18.180 回答