这在 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/