我使用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'>");
}
答案 0 :(得分:0)
好的,我通过反复试验找到了原因。
看到那条线?
var name = navigator.userAgent.toLowerCase()
Chrome似乎在解决名为name
的变量时遇到问题。我把它切换到bname
,现在一切都运行良好。