Javascript: ошибка "Требуется объект". Я не могу расшифровать это. Ты можешь?
Я использую javascript под названием "Facelift 1.2" на одном из своих веб-сайтов, и хотя скрипт работает в Safari 3, 4b и Opera, OmniWeb и Firefox, он не работает ни в одной версии IE. Но даже в рабочем браузере я получаю следующую ошибку, которую не могу расшифровать.
Может быть, в свое время - с большим опытом в Javascript - я смогу, но сейчас я подумал, что спрошу некоторых из вас, здесь, в SO.
Ниже приводится всплывающее сообщение об ошибке, которое я получаю в IETester, тестирующем страницу для Interet Explorer 6,7 и 8: всплывающее окно с ошибкой http://img21.imageshack.us/img21/3651/err2.png
Следующее из консоли Firebug в Firefox 3.0.6: http://img100.imageshack.us/img100/3636/err3.png
Веб-сайт: http://www.457cc.co.nz/index.php В случае, если это поможет вам увидеть проблему, упомянутую в действии.
Я также посмотрел, что соответствует строке 620:"строка 76":
this.isCraptastic = (typeof document.body.style.maxHeight=='undefined');
который является частью этого блока кода (взят из flir.js):
// either (options Object, fstyle FLIRStyle Object) or (fstyle FLIRStyle Object)
,init: function(options, fstyle) { // or options for flir style
if(this.isFStyle(options)) { // (fstyle FLIRStyle Object)
this.defaultStyle = options;
}else { // [options Object, fstyle FLIRStyle Object]
if(typeof options != 'undefined')
this.loadOptions(options);
if(typeof fstyle == 'undefined') {
this.defaultStyle = new FLIRStyle();
}else {
if(this.isFStyle(fstyle))
this.defaultStyle = fstyle;
else
this.defaultStyle = new FLIRStyle(fstyle);
}
}
this.calcDPI();
if(this.options.findEmbededFonts)
this.discoverEmbededFonts();
this.isIE = (navigator.userAgent.toLowerCase().indexOf('msie')>-1 && navigator.userAgent.toLowerCase().indexOf('opera')<0);
this.isCraptastic = (typeof document.body.style.maxHeight=='undefined');
if(this.isIE) {
this.flirIERepObj = [];
this.flirIEHovEls = [];
this.flirIEHovStyles = [];
}
}
Весь скрипт также доступен на моем сервере: http://www.457cc.co.nz/facelift-1.2/flir.js
Я просто не знаю, с чего начать поиск ошибки, тем более что она влияет только на IE, но работает в остальном. Может быть, у вас, ребята, есть идея. Я хотел бы услышать их.
Спасибо за прочтение. Jannis
PS: Вот что сообщает консоль Opera:
JavaScript - http://www.457cc.co.nz/index.php
Inline script thread
Error:
name: TypeError
message: Statement on line 620: Cannot convert undefined or null to Object
Backtrace:
Line 620 of linked script http://www.457cc.co.nz/facelift-1.2/flir.js
document.body.appendChild(test);
Line 70 of linked script http://www.457cc.co.nz/facelift-1.2/flir.js
this.calcDPI();
Line 2 of inline#1 script in http://www.457cc.co.nz/index.php
FLIR.init();
stacktrace: n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'
3 ответа
Я согласен с tvanfosson - причина, по которой вы получаете эту ошибку, весьма вероятна, потому что вы звоните init()
до загрузки страницы, так document.body
еще не определено.
На странице, на которую вы ссылаетесь, вы должны переместить следующий код в конец страницы (непосредственно перед закрывающим тегом html:
<script type="text/javascript">
FLIR.init({ path: 'http://www.457cc.co.nz/facelift-1.2/' });
FLIR.auto();
</script>
Еще лучше, вы должны прикрепить инициализацию к документу ready
событие. Если вы делаете это таким образом, нет необходимости даже перемещать ваш JavaScript в конец файла. Используя jquery:
$(document).ready( function(){
FLIR.init({ path: 'http://www.457cc.co.nz/facelift-1.2/' });
FLIR.auto();
});
Редактировать ответ оставлен для контекста. См @ ответ Триптиха (принято) для правильного разрешения.
Я предлагаю перенести включение javascript в конец вашей разметки. Я думаю, что происходит то, что код выполняется до полной загрузки DOM, и поэтому document.body имеет значение null, когда вы пытаетесь сослаться на него при определении свойства стиля maxHeight. Перемещение включения javascript в конец разметки должно быть достаточным, чтобы гарантировать, что тело документа загружено, по крайней мере, и избежать этой конкретной ошибки.
... rest of html....
<script type='text/javascript'
src='http://www.457cc.co.nz/facelift/flir.js'>
</script>
</body>
</html>