Каков способ Rolls-Royce для развертывания Java-апплета?
Я знаю, как развернуть апплет с помощью тегов applet
, object
, embed
и JavaScript
, но я использую лучший подход (с точки зрения конечного пользователя).
Sun предлагает использовать тег апплета и mixed embed/object на той же странице.
Я рассматриваю следующее:
- Поддержка кросс-браузера.
- Откат для загрузки страницы, если найдена неправильная версия Java (например, pre 1.5).
- Загрузка страницы как для периода запуска Java VM, так и при загрузке Jar (в идеале это настраиваемый заставку с индикатором выполнения).
Вопросы задавались раньше: как развернуть, проверить для 1.6 и Плагины. Ни один из них не полностью отвечает на мой вопрос. Я также не рассматриваю веб-запуск или Java FX.
Мое текущее решение состоит в том, чтобы включить дополнительный небольшой тестовый апплет, скомпилированный для Java 1.1. Если Java pre-1.5 найден, он перенаправляет страницу на страницу сбоя. Если Java не найден, страница запрашивает у пользователя посещение java.com. Это работает приемлемо, но плохо, потому что для этого требуется дополнительный апплет и ничего не отображается во время запуска виртуальной машины.
Ответы
Ответ 1
См. Решение PulpCore (лицензия: BSD).
Пример: игра Milpa... теперь это развертывание аплетов Rolls-Royce, если я когда-либо видел его.
И - абсолютно согласен, Sun Deployment Toolkit остро нуждается в обработке отключенной Java - кажется, это полностью игнорируется в настоящее время.
Ответ 2
После долгих проблем со старой и устаревшей информацией по всему миру кажется, что на самом деле действительно простой способ развернуть апплеты - просто дайте Sun написать правильные теги для вас!
<script src="http://java.com/js/deployJava.js"></script>
<script>
var attributes = {
code:'java2d.Java2DemoApplet.class',
archive:'Java2Demo.jar',
width:710,
height:540
};
var parameters = {
fontSize:16
};
var version = '1.6' ; // whichever minimum version you want to target, null works also
deployJava.runApplet(attributes, parameters, version);
</script>
Работала как шарм, кросс-браузер, для меня, с автоматическим перенаправлением для загрузки страницы, если java не установлен.
Подробнее здесь:
http://java.sun.com/javase/6/docs/technotes/guides/jweb/deployment_advice.html#deplToolkit
Ответ 3
Я считаю, что JavaScript является лучшим решением. Для IE пишите тег объекта и управляйте точной минимальной версией JRE с помощью атрибута classid, для всего остального тег embed с типом = "application/x-java-applet; version = 1.5" работает отлично. Оба используют встроенные механизмы браузера для работы с устаревшим (или полным отсутствием) java.
Вы также можете делать интересные вещи, например, указать минимальную версию 1.5.0, но установите автозагрузку до 1.6, чтобы любой, кто без java получает последнюю версию JRE вместо 1.5.
Проект, над которым я работаю, уже много лет превратил нашу собственную межплатформенную JS-оболочку, но с обновлением Java 6 10 Sun создала deployJava.js, который направлен на решение всех этих проблем для вас.
Ответ 4
+1 для пула для applet-fu работал у меня на хром, FF, IE 6,7,8.
Я не думаю, что он может получить больше рулонов, чем здесь:
http://products.metamolecular.com/2009/06/08/better-applet-deployment-with-applet-fu
http://github.com/metamolecular/applet-fu
Похоже, что это абсолютно простая вещь, и документации не так много. Но это красота!
applet_fu.run(
{'width':'550','height':'320'},
{
'archive':'myapplet.jar',
'code':'com/example/MyApplet.class',
'foo':'bar'
},
'1.4.2',
'<img src="/no-java.png" />'
);
Да, правильно, вы можете пощекотать в html, чтобы отобразить, если апплет не найден.
Часть 1.4.2 - это минимальная версия для проверки, если найдена более низкая версия, она все равно не покажет java. foo: bar - пример параметров.
Ответ 5
Я бы настоятельно рекомендовал против deployJava.js.
Я сомневаюсь, что это было проверено где угодно.
Просто посмотрите на его код:
s = '<param name="' + parameter + '" value="' +
parameters[parameter] + '">';
Он не закрывает тег! И Chrome задыхается от этого, полностью давая мне "Неиспользуемая ошибка: INVALID_STATE_ERR: DOM Exception 11"! Не говоря уже об использовании document.write, который вам нужно преодолеть с помощью таких Java Plug-In - важное дополнение к deployJava.js.
Зарегистрировано только, чтобы сказать это, поскольку я провел четыре часа в полном расстройстве, имея дело с этим на днях: (
Ответ 6
Для лучшей совместимости с несколькими браузерами вы должны следовать рекомендациям SUn, в частности, использовать смешанные теги embed/object. Это уродливо, но дает вам лучший охват.
Ответ 7
Рассмотрим наличие небольшого апплета на стартовой странице, который сообщает браузеру перейти на настоящую страницу апплета.
На стартовой странице также есть ссылка "Вы можете получить Java здесь".
По моему опыту, неприятный javascript дает неприятную поддержку: (
Также обратите внимание, что Java 6 u 10 может использовать Java WebStart для развертывания апплетов. Это может быть приятнее, если ваши пользователи имеют эту версию или более позднюю версию.
Ответ 8
Привет, просто используйте тег объекта. Это часть спецификации HTML и работает с большинством браузеров.
Откат с возможностью установки просто записывает текст в тег.
Вот полезная статья по теме:
http://depth-first.com/articles/2008/02/20/demystifying-java-applets-part-1-cross-browser-standards-compliant-pure-html-deployment-using-the-object-tag
Привет
Ответ 9
Хорошо, имейте в виду, что deployJava.js предназначен для вызова во время загрузки документа. Поэтому, если вы вставляете апплет динамически, то после события, после создания DOM, вам не повезло с этим новым стандартным подходом.
Нам пришлось использовать конструкцию object/embed/noembed.
Изменить: О, кто-то нашел лучший способ для этого, но для этого потребовалось ручное изменение исходного файла SUNJava.js, см. ссылку ниже:
Java Plug-In - важное дополнение к deployJava.js