JavaScript applet loader.

Рубрика: Development, Java, JavaScript/Ajax | 6 February 2009, 13:50 | juriy

У каждого разработчика есть свои маленькие “заморочки” по поводу того как должно выглядеть приложение. Одна из моих любимых: пользователь должен знать минимум о том, как работает приложение и на каких технологиях оно построено. Взять, к примеру, Flash. Загружается тихонько в окне браузера, крутит пользователю картинки или видео и до тех пор, пока пользователь не начнет по нему кликать правой кнопкой, не признаЕтся кто он такой.

С другой стороны Java. Вот тебе пользователь раз логотип при загрузке апплета, да побольше, побольше, а если ты вдруг забыл про то, что работаешь с великой и могучей Java, мы тебе иконку в трей кинем, чтобы он тебе оттуда напоминал что пора качать новую версию.
Вобщем, вы мою позицию поняли.

Недавно я задался вопросом, как организовать загрузку апплета на странице так, чтобы пользователь не увидел экрана загрузки. Вместо него я бы хотел, к примеру, разместить логотип и progress bar (не настоящий, а просто картинку, которая показывает, что процесс идет). Второе обязательное требование: чтобы приложение отображалось, как только GUI прорисован. Мы не хотим заставлять пользователя ждать лишнее время.

Перечитав комментарии http://voituk.kiev.ua/2008/05/28/java-deployment-toolkit/ я решил не использовать стандартный JavaScript от Sun. Я воспользовался альтернативой – скриптом из классного, но не очень известного проекта PulpCore. Этому проекту можно было бы посвятить отдельную заметку, отличная разработка заслуживающая более пристального внимания. После небольшой “доводки напильником” вышло отличное решение, которое я протестировал на тех браузерах, что были у меня под рукой.

Кроме “сокрытия” экрана загрузки, скрипт умеет определять версию JRE (как и аналог от Sun), делать “отложенную загрузку”: апплет загружается после того, как пользователь нажмет на кнопку.

Принцип работы скрипта прост: он определяет браузер и версию Java плагина, генерирует текст HTML элемента, который загружает апплет и отображает сплеш-скрин поверх него. Пользователь видит “правильный” сплеш, а не стандартный экран загрузки Java. Если же версия Java не подходит, отображается сообщение предлагающее пользователю решить эту проблему.

Когда апплет полностью загрузился и готов к тому чтобы предстать перед пользователем во всей красе, он (апплет) вызывает через LiveConnect функцию, которая убирает экран загрузки. Вуаля. Если LiveConnect по какой-то причине не сработал, сплеш автоматически исчезнет после таймаута.

Вот пример кода, который отобразит апплет на странице:


	<script type="text/javascript"><!--
		pulpcore_width = 500;
		pulpcore_height = 300;
		pulpcore_archive = "applet-17.jar";
		pulpcore_class = "TestApplet.class";
	//-->
	</script> 

	<div id="game">
		<script type="text/javascript" src="loader.js"></script>
		<noscript><p>To play, enable JavaScript from the Options or Preferences menu.</p></noscript>
	</div>

Примеры скрипта в действии можно посмотреть на сайте проекта PulpCore.

Вот так, просто и надежно мы оставляем пользователей в блаженном неведении, какая именно платформа делает работу. Жаль иконку из трея так же просто убрать не выйдет.

Комментариев: 6

6 Responses to “JavaScript applet loader.”

Сюда ссылаются:

Комментарии:

  1. Vadim Voituk

    Дык собственно где JavaScript, полученный “После небольшой “доводки напильником”” ?

  2. Juriy

    Скрипт в том виде, в котором он есть на сайте, отлично справляется с задачей. Я только немного подправил его, чтобы адаптировать под свой проект. Можно смело скачивать с сайта PulpCore и играться.

  3. corsair

    в лінуксі і в макі нічого в треї не висить %))

  4. Fanat

    Вещь в общем не плохая, но применительно к этой конкретной задаче (скрытие стандартной картинки загрузки)по-моему абсолютно бесполезная. У аплета есть параметр , который позволяет запихать в общем то любую картинку без всяких доп. пакетов. Смотрите подробнее здесь:
    http://java.sun.com/javase/6/docs/technotes/guides/plugin/developer_guide/special_attributes.html

  5. Vadim Voituk

    @Fanat
    Что-то мне подсказывает, что сработает это только в Java 1.6.

    @corsair
    Как это не висит? JavaConsole для каждого браузера запускается.

Leave a Reply