为什么这个JavaScript会添加Chrome?

时间:2014-08-20 10:51:41

标签: javascript google-chrome

我使用iFrame将每个JavaScript加载到古代历史的网站中。

有一个功能可以检查iFrame内容的height方式,然后将iFrame拉伸到此高度。

function dynamisch()
{

    //bla bla bla, script that is executed well

    // HERE IS THE ERROR LINE:
    var h = parent.frames["content"].document.getElementsByTagName("body")[0].scrollHeight + 20;

    //bla bla bla, again ancient typings which is interpreted as script
}

这在每一页都很好用。在内容页面上,还有一个JavaScript检查浏览器名称,然后包含拟合CSS文件。不要评判我,这是活着的历史!

所以在Chrome时代之前,有一个没有Chrome的CSS-including-script。随着Chrome开始兴起,该剧本也适用于Chrome。使用OLD脚本,上面的代码段执行良好 - 没有问题。使用NEW脚本,它会在标记的错误行上输出以下错误:

Uncaught TypeError: Cannot read property 'document' of undefined
dynamisch
onload

那么,为什么新脚本(见下文)对Chrome造成了太大的伤害,以至于它不记得曾经是document的内容?


<head>中的旧脚本执行得很好:

if(navigator.appName == "Netscape")
    {
        document.write("<link rel='stylesheet' href='../styles/aquado_ff.css.asp' type='text/css'>");
    }
    else if(navigator.appName == "Opera")
    {
        document.write("<link rel='stylesheet' href='../styles/aquado_ff.css.asp' type='text/css'>");
    }
    else if(navigator.appName == "Microsoft Internet Explorer")
    {
        document.write("<link rel='stylesheet' href='../styles/aquado_ie.css.asp' type='text/css'>");
    }

<head>中的新脚本,激怒了Chrome:

var name = navigator.userAgent.toLowerCase()
    //InternetExplorer
    if(name.indexOf("msie")>-1)
    {
    document.write("<link rel='stylesheet' href='../styles/aquado_ie.css.asp' type='text/css'>");
    }
    else if (name.indexOf("chrome")>-1)
    {
    document.write("<link rel='stylesheet' href='../styles/aquado_ff.css.asp' type='text/css'>");
    }
    else if (name.indexOf("firefox")>-1)
    {
    document.write("<link rel='stylesheet' href='../styles/aquado_ff.css.asp' type='text/css'>");
    }
    else if (name.indexOf("opera")>-1)
    {
    document.write("<link rel='stylesheet' href='../styles/aquado_ff.css.asp' type='text/css'>");   
    }
    else
    {
    document.write("<link rel='stylesheet' href='../styles/aquado_ie.css.asp' type='text/css'>");
    }

1 个答案:

答案 0 :(得分:0)

好的,我通过反复试验找到了原因。

看到那条线?

var name = navigator.userAgent.toLowerCase()

Chrome似乎在解决名为name的变量时遇到问题。我把它切换到bname,现在一切都运行良好。