javascript - 如何等待 Java 小程序在 Safari 上完成加载?

标签 javascript java safari dom-events

这在 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 中声明的公共(public)方法.

当我第一次在 Safari 中加载页面时,它会在小程序完成加载之前显示警告(因此消息框显示 undefined)。如果我刷新页面,小程序已经加载并且警告显示 function myMethod() { [native code] } ,如您所料。

当然,这意味着小程序方法在加载之前不可用,但 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>               

请注意,这假设小程序将在 Safari 中运行。我遇到过一些小程序需要 Java 6 的情况,即使使用与上述类似的代码,它也会简单地挂起 Safari。我选择在服务器上进行浏览器检测,并在浏览器不支持小程序时将用户重定向到错误页面。

关于javascript - 如何等待 Java 小程序在 Safari 上完成加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1293355/

相关文章:

javascript - 如何使用正则表达式选择特定字符之前的最后两个空格以外的所有多个空格?

java - Android构建报错: ro. build.fingerprint cannot exceed 91 bytes

ssh - 无法远程运行针对 Safari 11 的测试(ssh、CI)

javascript - Vuex 全局状态更改不会触发 Nuxt 中 v-for 循环中的重新渲染组件

javascript - Nock 拦截器链接,第二个模拟被忽略

javascript - 逗号优先的 JS 格式化程序

css - Safari/Chrome (Webkit) - 无法隐藏 iframe 垂直滚动条

java - 如何调用 public boolean onPrepareOptionsMenu(Menu menu)

java - 如何在package explorer中自动打开与查看的.java对应的文件夹位置

javascript - HTML5 视频 - 播放事件未触发