2010-01-15 2 views
1

Я искал его много, но, вероятно, я искал неправильные строки. Апплет Java кормит живые биты в моих страницы, Java-апплет получает доступ к полю ввода на моей странице и размещает информациюloading java applet on DOM load

<input type="hidden" id="F1" value="Nothing Yet"> 

, а затем она называет Javascript functionon страницы говорит LivePicker(), а затем он просто поднимает значение

var ClockVal = document.getElementById("F1").value; 
document.getElementById("ICSCLOCK").innerHTML = ClockVal; 

проблема я столкнулся в том, что это работает хорошо, но иногда в поджигатель консоли это дает ошибки, как LivePicker не определен, в то время как LivePicker будет работать прекрасно на странице, а иногда это даст F1 является не определено, в то время как мои часы будут работать нормально. Все эти ошибки появляются при загрузке страницы.

Java-апплет помещает данные последовательно, сначала помещает данные, а затем вызывает функцию js для ее обработки. Это отлично работает на тестовых страницах с минимальным HTML и JS, но когда я интегрирую его в свое приложение, которое использует много компонентов из YUI и много моего собственного JS-кода (который теперь, по-видимому, четко очерчен), он дает эти ошибки. Одна вещь, которую я хотел бы добавить, до минимизации, эти ошибки были очень вероятными, но после минимизации JS и CSS время загрузки страницы сокращается до половины, а появление этих ошибок также уменьшается до половины.

Я подозреваю, что это связано с тем, что при загрузке страницы апплет пытается манипулировать DOM, который еще не готов. Есть ли что-нибудь, что может остановить апплет ждать до полной загрузки DOM? Я попробовал window.onload и onDOMReady функцию YUI, они, похоже, вообще не действуют.

Может ли кто-нибудь помочь?

+0

Просто добавить, Java-апплет размещает данные после того, как каждую 1 секунду, то почему после загрузки страницы, я думаю, в следующем цикле, апплет получает входные поля или функцию, и ошибки Dont появляются. –

ответ

0

Браузер должен задерживать выполнение кода window.onload до тех пор, пока после не будет создано дерево DOM и после того, как все остальные внешние ресурсы будут полностью загружены и страница будет отображаться в браузере.

Window.onload должен работать. Ваш аплет должен быть запущен перед событием onload.

В качестве теста, вы можете сделать следующее и посмотреть, если он меняет все:

  • создать скрытое поле «установить» на странице со значением «ложь»;
  • на window.onload установите для поля «set» значение «true»;
  • в вашем апплете проверьте поле «установить»;
  • только начинайте делать вещи в своем апплете, если определено поле «set» и имеет значение «true»;

Другое дело, не делайте ожидание в своем апплете, чтобы проверить поле «установить». Ваш апплет не должен предпринимать никаких действий, если поле не определено или false. При необходимости вы можете активировать его на window.onload.

+0

Спасибо за подробный ответ. Я пытаюсь понять, что произойдет, если я это сделаю, но просто вопрос, этот скрытый элемент ввода также будет в DOM, что если он не загрузится и апплет попытается загрузить его. –

+0

Я не помню точно, что произойдет в этом случае; вы либо получаете исключение, либо получаете нуль вместо этого, оба случая означают, что поле не определено. Еще одна вещь, которую вы могли бы попробовать (которая, я думаю, должна быть проще), - это позволить загрузке апплета и ничего не делать. Затем на window.onload есть функция javascript на вашей странице, которая вызывает метод на вашем апплете, чтобы запустить его. – 2010-01-19 12:28:50

+0

Я пробовал это, похоже, какая-то другая проблема в апплетах, и я подозреваю, что дочерние потоки не прекращаются. Я уменьшил код, теперь шаг за шагом обнаружил проблему в апплетах. См. Мою другую тему http://stackoverflow.com/questions/2134028/terminating-java-applet-thread-on-page-unload Если вы можете мне помочь в этом. –