Это не работает в 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, она показывает предупреждение, прежде чем апплет закончил загружаться (так дисплеи окна сообщения 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 даже с кодом, подобным приведенному выше. Я решил выполнять обнаружение браузера на сервере и перенаправлять пользователя на страницу с ошибкой, когда браузер не поддерживает апплет.
У меня был аналогичный некоторое время назад и добавление MAYSCRIPT к тегу апплета решило мою проблему.
Взгляните на эту страницу: http://www.htmlcodetutorial.com/applets/_APPLET_MAYSCRIPT.html
Надеюсь, это поможет!