以下是情况描述: 我有两个页面:
- 1个 HTML 页面
- 1个外部 JavaScript
现在,在 HTML 页面中,会有内部 JavaScript 代码允许放置 window.onload
,和其他页面特定的方法/函数。
但是,在外部 JavaScript 中,我希望在触发 window.onload
事件之前完成某些任务。这是为了先初始化自定义组件。
有没有一种方式可以确保在触发 window.onload
事件之前在外部 JavaScript 中进行初始化?
我提出这个问题的原因是尝试制作可重用代码(只需构建一次 - 到处使用),并且外部脚本必须检查它是否已经在主 HTML / JSP / ASP / PHP 页面中运行。而且我不想要 jQuery 的解决方案 @_@
以下是我在 Stack Overflow 上浏览的一些链接,希望能找到解决方案:
- Javascript - How to detect if document has loaded (IE 7/Firefox 3)
- How to check if page has FULLY loaded(scripts and all)?
- Execute Javascript When Page Has Fully Loaded
有人可以帮忙或指导我找到解决方案吗?非常感谢你们的帮助。
[更新回复 - 2012年11月19日]
大家好,感谢您的建议和提供的解决方案,在寻找和测试可行解决方案方面都很有用。 尽管我对自己的结果不是百分之百满意,但我知道您的建议和帮助已经让我更接近一个解决方案,并且可能会帮助其他处于类似情况的人。
下面是我想出的解决方案:
test_page.html
<html>
<head>
<title></title>
<script type="text/javascript" src="loader.js"></script>
<script type="text/javascript" src="test_script_1.js"></script>
<script type="text/javascript" src="test_script_2.js"></script>
<script type="text/javascript">
window.onload = function() {
document.getElementById("div_1").innerHTML = "window.onload complete!";
}
</script>
<style type="text/css">
div {
border:thin solid #000000;
width:500px;
}
</head>
<body>
<div id="div_1"></div>
<br/><br/>
<div id="div_2"></div>
<br/><br/>
<div id="div_3"></div>
</body>
</html>
加载器.js
var Loader = {
methods_arr : [],
init_Loader : new function() {
document.onreadystatechange = function(e) {
if (document.readyState == "complete") {
for (var i = 0; i < Loader.methods_arr.length; i++) {
Loader.method_arr[i]();
}
}
}
},
load : function(method) {
Loader.methods_arr.push(method);
}
}
test_script_1.js
Loader.load(function(){initTestScript1();});
function initTestScript1() {
document.getElementById("div_1").innerHTML = "Test Script 1 Initialized!";
}
测试脚本2.js
Loader.load(function(){initTestScript2();});
function initTestScript2() {
document.getElementById("div_2").innerHTML = "Test Script 2 Initialized!";
}
这将确保在调用window.onload
事件处理程序之前首先调用脚本,同时还确保文档首先被渲染。
你觉得这个解决方案怎么样?
再次感谢大家的帮助 :D