2

我在我的一个网站中使用了一个名为“Facelift 1.2”的 javascript,虽然该脚本在 Safari 3、4b 和 Opera、OmniWeb 和 Firefox 中有效,但它不适用于任何 IE 版本。但即使在工作浏览器中,我也会收到以下错误,我无法破译。

也许在适当的时候——在 Javascript 方面有更多经验——我将能够做到,但现在我想我会问你们中的一些人,在 SO。

以下是我在 IETester 测试 Internet Explorer 6,7 和 8 页面时出现的错误弹出窗口: IE 错误弹出

以下来自 Firefox 3.0.6 中的 Firebug 控制台: Firebug 控制台日志

该网站是: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 但在其余部分有效。也许你们有一个想法。我很想听听他们的意见。

谢谢阅读。詹尼斯

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'
4

3 回答 3

7

我同意 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();
});

更多关于 jquery 的 document.ready 事件 »

于 2009-02-26T21:20:45.233 回答
0

编辑答案左侧的上下文。请参阅@Triptych 的(已接受)答案以获得正确的解决方案。

我的建议是将包含的 javascript 移到标记的末尾。我认为正在发生的事情是代码在 DOM 完全加载之前执行,因此当您尝试在确定 maxHeight 样式属性时引用它时 document.body 为空。将包含的 javascript 移到标记的末尾应该足以保证至少加载文档的主体并避免此特定错误。

 ... rest of html....

    <script type='text/javascript'
            src='http://www.457cc.co.nz/facelift/flir.js'>
    </script>
 </body>
 </html>
于 2009-02-26T21:11:05.613 回答
0

安装 .net Framework v2 并解决问题。

于 2009-04-17T22:06:40.663 回答