На моей веб-странице есть следующий код JavaScript ...
64 var description = new Array();
65 description[0] = "..."
66 description[1] = "..."
...
78 function init() {
79 document.getElementById('somedivid').innerHTML = description[0];
80 }
81
82 window.onload = init();
В Microsoft Internet Explorer это вызывает следующую ошибку ...
A Runtime Error has occurred.
Do you wish to debug?Line: 81
Error: Not implemented

Строка 79 выполняется, как ожидалось.
Если строка 79 закомментирована, она все равно вызывает ошибку.
Если я закомментирую строку 82, то функция не выполняется и ошибки нет.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Попробуйте вместо этого добавить прослушиватель envent для 'load' или используйте декларативный синтаксис <body onload = "init()">.
Обновлено: Кроме того, говоря, что window.onload = init(); устанавливает window.onload для результата вызова init(). Вы имеете в виду window.onload = init; (лямбда-выражение). Это все еще плохая практика, поскольку она перезаписывает другие вещи, которые могут быть связаны с window.onload.
Однако я не понимаю, почему это заслуживает отрицательного голоса. Это неправильно?
Удаление строки 82 и обновление тега body, как описано, работают.
Вы можете установить обработчик загрузки где угодно. Это может быть даже первое, что вы делаете внутри первого тега <script> под <head>.
Строка 82 не должна читать:
window.onload = init;
Когда вы выполняете «init ()», это вызов функции, возвращающей void. В конечном итоге вы вызываете эту функцию до загрузки страницы.
window.onload = init (); Назначает результат Init для window.onload, который ожидает указатель на функцию. Думаю, это ошибка.
Несколько хороших ответов. Но я согласен с этим, потому что он требует всего двух нажатий клавиши.
В дополнение к предлагаемым здесь исправлениям при загрузке также проверьте, есть ли несколько элементов с этим идентификатором, я считаю, что IE вернет коллекцию всех элементов с этим идентификатором, и в этом случае вам нужно будет выбрать предполагаемый элемент из коллекцию перед доступом к этому свойству или убедитесь, что вы используете уникальные идентификаторы.
Чтобы сохранить любые ранее установленные функции загрузки, попробуйте это
var prevload = window.onload;
window.onload = function(){
prevload();
init();
}
Сначала проверьте, не установлена ли prevload: prevload && prevload ();
Вместо этого вы должны использовать attachEvent / addEventListener (и абстрагировать его, если вы делаете это более одного раза).
@Ates Goral: Если это так, то это чертовски сладкий синтаксический сахар.
Попробуйте запустить его в FireFox с включенным плагином FireBug. Это позволит вам отлаживать javascript
На самом деле это нормально. Обработчик события onload будет выполнен после загрузки окна.