Лучшая практика для использования window.onload

Многие уважаемые разработчики, такие как Брайан Гетц и Джош Блох, отметили, что:

Если значение hashCode () объекта может меняться в зависимости от его состояния, тогда мы должны быть осторожны при использовании таких объектов, как ключи в коллекциях на основе хэшей, чтобы гарантировать, что мы не позволяем их состоянию изменять, когда они используются в качестве хеш-ключей. Все хэш-коллекции предполагают, что хэш-значение объекта не изменяется, пока оно используется в качестве ключа в коллекции. Если хэш-код ключа должен был измениться, пока он был в коллекции, некоторые непредсказуемые и запутанные последствия могли бы последовать. Обычно это не проблема на практике - распространенной практикой является использование изменяемого объекта, такого как List, как ключа в HashMap.

37
задан Henrik Paul 7 March 2009 в 22:28
поделиться

4 ответа

window.onload = function(){}; работы, но как Вы, возможно, заметили, , это позволяет Вам указывать только 1 слушателя .

я сказал бы, что лучший/более новый способ сделать это будет состоять в том, чтобы использовать платформу, или к только для использования простой реализации собственного компонента addEventListener и attachEvent (для IE) методы, который позволяет, Вы к удаляете слушатели для событий также.

Вот реализация перекрестного браузера:

// Cross-browser implementation of element.addEventListener()
function listen(evnt, elem, func) {
    if (elem.addEventListener)  // W3C DOM
        elem.addEventListener(evnt,func,false);
    else if (elem.attachEvent) { // IE DOM
         var r = elem.attachEvent("on"+evnt, func);
         return r;
    }
    else window.alert('I\'m sorry Dave, I\'m afraid I can\'t do that.');
}

// Use: listen("event name", elem, func);

Для window.onload использования случая: listen("load", window, function() { });

<час>

РЕДАКТИРОВАНИЕ я хотел бы развернуть свой ответ путем добавления драгоценной информации, на которую указали другие.

Это о DOMContentLoaded (Mozilla, Opera и WebKit nightlies в настоящее время поддерживают это), и onreadystatechange (для IE) события , который может быть применен к объект документа понять, когда документ доступен, чтобы управляться (не ожидая всех изображений/таблиц стилей и т.д. быть загруженным).

существует много "hacky" реализаций для поддержки перекрестных браузеров этого, таким образом, я настоятельно рекомендую использовать платформу для этой функции.

44
ответ дан sachinjain024 7 March 2009 в 22:28
поделиться

Лично, я предпочитаю этот метод . Мало того, что это позволяет Вам иметь приблизительно onload функции, но если некоторый сценарий определил его прежде , Вы добрались до него, этот метод достаточно хорош обработать это... Единственная оставленная проблема состоит в том, если страница загружает несколько сценариев, которые не используют эти window.addLoad() функция; но это - их проблема :).

P.S. Его также большой, если Вы хотите "объединить больше функций в цепочку" позже.

1
ответ дан Mike 7 March 2009 в 22:28
поделиться

Современные платформы JavaScript представили идею "документа готовое" событие. Это - событие, которое будет стрелять, когда документ будет готов иметь манипуляции DOM, выполненные на нем. "onload" событие стреляет только после того, как ВСЕ на странице загрузилось.

Наряду с "документом готовое" событие, платформы позволили стоять в очереди несколько битов кода JavaScript и функций для выполнения, когда событие стреляет.

Так, если Вы настроены против платформ, лучший способ пойти об этом состоит в том, чтобы реализовать Вашу собственную document.onload очередь.

, Если Вы не настроены против платформ, затем Вы захотите изучить jQuery и document.ready, Прототип и dom:loaded, Dojo и addOnLoad или Google для [Ваша платформа] и "документ, готовый".

, Если Вы не выбрали платформу, но интересно, jQuery является хорошим местом для запуска. Это не изменяет ни одной базовой функциональности JavaScript, и будет обычно оставаться вне Вашего пути и позволять Вам сделать вещи, как Вам нравится, когда Вы хотите.

10
ответ дан Alan Storm 7 March 2009 в 22:28
поделиться
  • 1
    Можно получить бесплатный сертификат SSL от startssl, that' d избавляются от предупреждений. самоподписанные сертификаты будут всегда бросать предупреждения, о которых Вы говорите. – Thomas Ward 25 October 2012 в 02:56

Joomla поставляется с MooTools, поэтому вам будет проще использовать библиотеку MooTools для дополнительного кода. MooTools поставляется с настраиваемым событием, называемым domready, которое запускается, когда страница загружается и дерево документа анализируется.

window.addEvent( domready, function() { code to execute on load here } );

Дополнительную информацию о MooTools можно найти здесь . Joomla 1.5 в настоящее время поставляется с MT1.1, тогда как альфа Joomla 1.6 будет включать MT1.2

2
ответ дан 27 November 2019 в 04:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: