Функция запуска Javascript после загрузки страницы
Я пытаюсь создать небольшую автоматизацию script в Javascript, которую я хочу запустить на сайте с помощью функции Opera User script, чтобы определить внешние скрипты для запуска. Я использовал эту функцию раньше, чтобы запускать скрипты, которые я писал с внешних сайтов, с хорошим эффектом.
Мне нужно подождать, пока страница загрузится для script, но я не могу заставить ее работать. Код в настоящее время:
if (addEventListener in document) { // use W3C standard method
document.addEventListener('load', meerfirst(), false);
} else { // fall back to traditional method
document.onload = meerfirst();
}
function meerfirst(){
nameForm = document.forms['aspnetForm'];
nameForm.elements('ctl00$CPH1$NewQuoteView$TitlesView$DropDownListTitles').value = 'MR:TRUE:MR';
nameForm.elements('ctl00$CPH1$NewQuoteView$TextBoxFirstName').value = 'James';
}
Это моя собственная функция с добавлением оператора if, найденного по другому вопросу. Я также попробовал window.onload, но он все еще не работал.
Странно Opera фактически не выполняет script вообще, как если бы я установил точку останова в выражении if, который она на самом деле не разрывает на ней. Может ли сайт иметь встроенную функцию антивируса? Или возможно что-то, что я делаю неправильно, чтобы остановить это выполнение?
Ответы
Ответ 1
В этом коде несколько проблем:
if (addEventListener in document) { // use W3C standard method
document.addEventListener('load', meerfirst(), false);
} else { // fall back to traditional method
document.onload = meerfirst();
}
-
Вам нужно поставить кавычки вокруг addEventListener в оператор if. Вы ищете имя свойства в document
, поэтому имя должно быть строкой: if( 'addEventListener' in document )
-
Вы хотите ссылаться на функцию по имени в инструкции addEventListener, а не называть ее немедленно. Вы должны удалить круглые скобки - используйте meerfirst
вместо meerfirst()
.
-
Назначение document.onload не влияет. Посмотрите мой ответ на window.onload vs document.onload и вместо этого используйте window.onload.
-
После изменения назначения на окно.onload вам также нужно удалить круглые скобки. Опять же, вы просто ссылаетесь на функцию по имени и не хотите, чтобы на самом деле ее вызывали на данный момент.
-
Наконец, я рекомендую слушать DOMContentLoaded
, а не load
- если вы не собираетесь запускать какой-то код, который должен ждать загрузки всех изображений.
Ответ 2
Передайте функцию как обратный вызов
addEventListener('load', meerfirst, false);
// no parens! ^^
поместив скобки, вы вместо этого сразу вызовите функцию (перед загрузкой) и передайте ее (бесполезное, не функциональное) возвращаемое значение в addEventListener.
Кстати, поскольку вы уже знаете, в каком браузере вы будете использовать код, почему вы выполняете это тестирование функций в начале?
Ответ 3
Try:
window.onload = function()
{
meerfirst();
};
Ответ 4
Ваш ответ хорошо вложен в O'Reilly "Javascript: окончательное руководство"
// Register the function f to run when the document finishes loading.
// If the document has already loaded, run it asynchronously ASAP.
function onLoad(f) {
if (onLoad.loaded) // If document is already loaded
window.setTimeout(f, 0); // Queue f to be run as soon as possible
else if (window.addEventListener) // Standard event registration method
window.addEventListener("load", f, false);
else if (window.attachEvent) // IE8 and earlier use this instead
window.attachEvent("onload", f);
}
// Start by setting a flag that indicates that the document is not loaded yet.
onLoad.loaded = false;
// And register a function to set the flag when the document does load.
onLoad(function() { onLoad.loaded = true; });
Это будет работать не только при завершении загрузки браузером, но также и в отношении кроссбраузерных расхождений. Наслаждайтесь:)