当您使用 Firefox 3 执行以下示例时:
<html>
<head>
<script language="javascript" type="text/javascript">
<!--
function openWindow(){
var w = window.open('', 'otherWin', 'width=600,height=600');
w.document.write(document.getElementsByTagName("html")[0].innerHTML);
w.document.close();
reportLinks(w.document.links);
}
function reportLinks(links){
var report = 'links: '+links.length;
for (var i=0;i<links.length;i++){
report += '\n (link='+links[i].href+')';
}
alert(report);
}
//-->
</script>
</head>
<body>
<p><a href="javascript: openWindow()">Open Same Content and Show Links Report</a></p>
<p><a href="javascript: reportLinks(document.links)">Show Links Report</a></p>
</body>
</html>
您将看到单击“显示链接报告”时显示的链接数与单击“打开相同内容并显示链接报告”时显示的链接数均为 2。但是,当从该页面获取外部 JavaScript 文件引用时,行为似乎有所不同(如果需要,只需创建一个空文件 some.js)。单击“打开相同内容并显示链接报告”时,链接数将为 0。
<html>
<head>
<script language="javascript" type="text/javascript" src="some.js"></script>
<script language="javascript" type="text/javascript">
<!--
function openWindow(){
var w = window.open('', 'otherWin', 'width=600,height=600');
w.document.write(document.getElementsByTagName("html")[0].innerHTML);
w.document.close();
reportLinks(w.document.links);
}
function reportLinks(links){
var report = 'links: '+links.length;
for (var i=0;i<links.length;i++){
report += '\n (link='+links[i].href+')';
}
alert(report);
}
//-->
</script>
</head>
<body>
<p><a href="javascript: openWindow()">Open Same Content and Show Links Report</a></p>
<p><a href="javascript: reportLinks(document.links)">Show Links Report</a></p>
</body>
</html>
这可能是加载页面和 reportLinks 准确执行的那一刻的问题。我假设添加了外部 some.js 文档没有完全建立起来。有没有办法可以注册这个 reportLinks 调用 onload 事件,以便我可以确定 document.links 是完整的?
顺便说一句,该示例在 Google Chrome 的两种情况下都可以正常工作。
(在回答1之后添加)
正如 Marcel K 所建议的那样。我重写了这个例子,并以我真正想要的方式添加了代码。现在对其进行测试,这个简单的示例似乎适用于 Firefox 和 Chrome。
<html>
<head>
<script type="text/javascript" src="some.js"></script>
<script type="text/javascript">
<!--
function openWindow(){
var w = window.open('', 'otherWin', 'width=600,height=600');
w.document.write('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">\n<html>\n'+
document.getElementsByTagName("html")[0].innerHTML+'\n</html>');
w.onload=function(){
reportLinks(w.document.links);
};
w.document.close();
}
function reportLinks(links){
var report = 'links: '+links.length;
for (var i=0;i<links.length;i++){
report += '\n (link='+links[i].href+')';
}
alert(report);
}
//-->
</script>
</head>
<body>
<p><a href="javascript: openWindow()">Open Same Content and Show Links Report</a></p>
<p><a href="javascript: reportLinks(document.links)">Show Links Report</a></p>
</body>
</html>
我曾希望通过这个简单的示例来展示我正在编写的实际代码的简单案例。复杂 html 的打印预览屏幕,一旦打开,我想在其中禁用所有 href。但是在那一个中,永远不会调用 onload 处理程序...在这种情况下,如何以最可靠的方式注册 onload 处理程序?
非常感谢,马塞尔