IE9和旧版本之间的JavaScript行为差异
已编辑:此问题出现在所有现代浏览器中。在Firefox、Chrome和IE9中的测试都表现相同。因此,我的JavaScript(如下所示)只适用于较旧的IE版本 我有一个自制的webhelp系统,它在第一次启动时只显示一个帮助页面 每个帮助页面都有一个header div,其中包含一个链接,可以在框架集的上下文中显示自己(我知道,我知道) 以下是生成链接的JavaScript:IE9和旧版本之间的JavaScript行为差异,javascript,html,internet-explorer,internet-explorer-8,internet-explorer-9,Javascript,Html,Internet Explorer,Internet Explorer 8,Internet Explorer 9,已编辑:此问题出现在所有现代浏览器中。在Firefox、Chrome和IE9中的测试都表现相同。因此,我的JavaScript(如下所示)只适用于较旧的IE版本 我有一个自制的webhelp系统,它在第一次启动时只显示一个帮助页面 每个帮助页面都有一个header div,其中包含一个链接,可以在框架集的上下文中显示自己(我知道,我知道) 以下是生成链接的JavaScript: <script type="text/JavaScript"> $.noConflict();
<script type="text/JavaScript">
$.noConflict();
var frameurl="frameset.html?";
var filename=location.href.substring(location.href.lastIndexOf('/') + 1,location.href.length);
var truncate=location.href.substring(0, location.href.length-filename.length - 1);
var subfolder=truncate.substring(truncate.lastIndexOf('/')+1,truncate.length)+"/";
var newurl=frameurl+filename;
document.write('<a href="' + newurl + '"><span class="bannerlink">Contents and Search</span></a>');
</script>
然后frameset.html包含以下脚本来解释该字符串并显示正确的页面:
<script type="text/javascript">
function load() {
var test=(location.href.lastIndexOf('?'));
if (test>0) {
var page=location.href.substring(location.href.lastIndexOf('?') + 1,location.href.length);}
else {
var page="about_help.html";
}
document.getElementById("contentwin").src=page; }
</script>
解决方案是,您正在引用一个id,而没有具有该值的id
document.getElementById("contentwin").src=page; } <-- you are referencing an id
<frame border=0 frameborder=0 name="contentwin" src=""/> <-- There is no id here!
document.getElementById(“contentwin”).src=page;}是的,IE的不同版本之间的URL没有区别。不过,这缩小了它的范围,不是吗。如果URL仍在html文件中正确构造,则问题一定在于解释框架集中构造的URL的脚本。调试表明IE9中未像以前的浏览器那样设置变量page
的值。SCRIPT5007:无法设置属性“src”的值:对象为null或未定义的frameset.html?关于\u account\u demographics\u xaa\u insight.html,第22行字符2 iframe标记看起来像什么?它是framset,不是iframe。用代码更新问题。将
添加到框架集文档的
可以解决IE的问题。不过,我仍然想了解javascript的问题是什么。这绝对是正确的解决方案。非常感谢你。现在,所有浏览器中的一切行为都与预期完全一致。因此,显然,在旧版本的IE中,这起作用的原因是,当@id不存在时,它使用了@name
属性作为回退,这也解释了为什么页面呈现速度比我希望的要慢。非常感谢你的帮助!IE9也改掉了这个坏习惯
<frameset onload="load()" rows="52px,*" border=0 frameborder=0>
<frame border=0 frameborder=0 src="fis_hdr.html" name="header" scrolling="no"/>
<frameset border=0 frameborder=0 cols="210px,*">
<frameset border=0 frameborder=0 rows="50px,*">
<frame border=0 frameborder=0 scrolling="no" name="searchwin" src="sub/searchbox.html"/>
<frame marginwidth="5px" border=0 frameborder=0 name="indexwin" src="tocnav.html"/>
</frameset>
<frame border=0 frameborder=0 name="contentwin" src=""/>
</frameset>
</frameset>
document.getElementById("contentwin").src=page; } <-- you are referencing an id
<frame border=0 frameborder=0 name="contentwin" src=""/> <-- There is no id here!
<frame border=0 frameborder=0 name="contentwin" id="contentwin" src=""/>