我想模擬天生此行爲:正在使用document.write唯一可能的方式來同步跨瀏覽器跨域加載腳本?
<script src="console.log.1.js"></script>
<script>console.log(2)</script>
<script>console.log(3)</script>
這登出:
1
2
3
這樣做行不通:
<script>
var x = document.createElement("script");
x.src = "console.log.1.js";
x.async = false;
x.defer = false;
document.body.appendChild(x);
console.log("2");
console.log("3");
</script>
它登出:
2
3
1
The唯一的辦法,我發現到目前爲止實現它:
<script>
document.write("<scrip" + "t src='console.log.1.js'></scrip" + "t>");
</script>
<script>
console.log("2");
console.log("3");
</script>
那是真給力外部腳本的同步加載在所有瀏覽器的唯一途徑?爲什麼不設置async = false,推遲= false工作?
UPDATE
僅供參考,如果有人想知道,下面的文件撰寫工作開始(在Chrome ..):
<script>
// http://jsbin.com/avatiw logs "during"
document.write('<scrip' + 't>console.log("before");document.write("<scrip" + "t src=\\"http://jsbin.com/avatiw\\"></scrip" + "t>");</scrip' + 't>');
document.write('<scrip' + 't>console.log("after");</scrip' + 't>');
</script>
工程和註銷:
"before"
"during"
"after"
你有沒有考慮使用'document.getElementsByTagName( '身體' )[0] .appendChild(X);'?但即使如此,是否有一個原因,你不是追加到'head'而不是'body'? – 2012-03-07 17:46:43
我希望仍然會註銷231,就像第二個例子。 – Karolis 2012-03-07 17:48:44
@DavidThomas:我和Karolis在一起。這並不是說腳本元素不會在執行腳本元素之後立即插入(至少在Chrome上,根據開發工具),而是以這種方式附加一個'script'元素觸發* asynchronous *操作下載腳本。 – 2012-03-07 18:02:25