在JavaScript文档中嵌入JavaScript时,放置<script>标记和包含JavaScript 的适当位置在哪里?我似乎记得你不应该把它们放在这个<head>部分中,但放在该部分的开头<body>也是不好的,因为在完全呈现页面之前必须解析JavaScript(或类似的东西).这似乎将该部分的末尾<body>作为<script>标记的逻辑位置.
所以,在这里是把正确的地方<script>标记?
(这个问题引用了这个问题,其中建议JavaScript函数调用应该从<a>标签移动到<script>标签.我专门使用jQuery,但更一般的答案也是合适的.)
我在IFRAME中进行QUnit测试,并有一个递归JavaScript函数,在启动QUnit之前将所有脚本从父页面加载到IFRAME中.这非常有效.我的问题是我们的一些脚本使用document.ready来开始工作.
像这样的东西:
$(document).ready(function () {
// blah
});
Run Code Online (Sandbox Code Playgroud)
做他们的工作.我更愿意不更改生产代码只是为了考虑测试,我不希望这些生产脚本认为IFRAME文档是"准备好",直到加载每个脚本.
我怎么能延迟"document.ready"本身?
这是我的伪代码给你一个例子来工作:
scripts[0] = "/foo/bar.js";
scripts[1] = "/blah/blah.js";
function RecursiveScriptStart(){
// I want to set document.ready = false right here!
if(scripts.length == 0) {
QUnitStart();
return;
}
RecursiveScriptLoader(0, scripts);
}
function RecursiveScriptLoader(currentScriptID, scripts) {
$.getScript(scripts[currentScriptID], function () {
if (currentScriptID == (scripts.length - 1)) {
QUnitStart();
}
else {
RecursiveScriptLoader(currentScriptID + 1, scripts);
}
});
}
function QUnitStart() {
// I want to set document.ready = true right here!
QUnit.stop();
QUnit.start(); …Run Code Online (Sandbox Code Playgroud) 我目前正在阅读有关推迟Javascript加载的文章:https : //developers.google.com/speed/docs/best-practices/payload#DeferLoadingJS
他们使用以下脚本:
<script type="text/javascript">
// Add a script element as a child of the body
function downloadJSAtOnload() {
var element = document.createElement("script");
element.src = "deferredfunctions.js";
document.body.appendChild(element);
}
// Check for browser support of event handling capability
if (window.addEventListener)
window.addEventListener("load", downloadJSAtOnload, false);
else if (window.attachEvent)
window.attachEvent("onload", downloadJSAtOnload);
else window.onload = downloadJSAtOnload;
</script>
Run Code Online (Sandbox Code Playgroud)
我目前有4个要“延迟”的独立Javascript文件。
我将如何使用Google的示例代码来实现这一目标?
非常感谢您的指导。