[英]Javascript to load another js file
我正在嘗試從JS文件加載另一個JS文件。
在我的JavaScript文件run.js中 ,我具有以下內容:
document.write("<script type='text/javascript' src='my_script.js'></script>");
alert(nImages);
在my_script.js端,我有以下內容:
<SCRIPT language="JavaScript" type="text/javascript">
<!--
nImages = 6;
//-->
</SCRIPT>
但是我似乎nImages
從my_script.js文件中警告nImages
。
您可以這樣做:
var script = document.createElement('script');
script.src = 'my_script.js';
script.type = 'text/javascript';
script.onload = function () {
alert(nImages);
};
document.getElementsByTagName('head')[0].appendChild(script);
您不應在腳本文件中使用HTML。 您的腳本文件my_script.js應該只包含此文件。
nImages = 6;
附加說明:您不需要language="JavaScript"
或<!--
或//-->
。 這些是現代瀏覽器(甚至IE6)都不需要的舊約定。 我還避免在您的JS中使用document.write()
,因為它會影響性能。 您可能需要查看諸如RequireJS之類的庫,該庫提供了一種更好的方式來加載頁面中的其他JS文件。
我在Github上也有一個受Steve Souders啟發的代碼片段,該片段通過直接JS加載另一個文件。
var theOtherScript = 'http://example.com/js/script.js';
var el = document.createElement('script');
el.async = false;
el.src = theOtherScript;
el.type = 'text/javascript';
(document.getElementsByTagName('HEAD')[0]||document.body).appendChild(el);
這會將其他腳本附加到元素(如果存在)或頁面的。
Javascript文件中不應包含HTML。 它們應該完全由Javascript代碼組成, so my_script.js
應該僅包含:
nImages = 6;
這仍然不起作用,因為當您將新的腳本標記寫入文檔時,它不會立即運行。 可以確保run.js
在my_script.js
啟動之前完成運行,因此在您對其進行警報時nImages
是未定義的,然后在以后變為6。 您會看到這可行:
document.write("<script type='text/javascript' src='my_script.js'></script>");
function call_on_load(){
alert(nImages);
}
如果my_script.js
的內容是:
nImages = 6;
call_on_load();
編輯
由於您在評論中說無法編輯my_script.js
,因此可以執行此操作,盡管它並不是一個很好的解決方案:
// Force nImages to be undefined
var undefined;
window.nImages = undefined;
document.write("<script type='text/javascript' src='my_script.js'></script>");
(function is_loaded(cb){
if(typeof window.nImages == 'undefined')
setTimeout(function(){ is_loaded(cb); }, 100);
else
cb();
})(function(){
// This is executed after the script has loaded
alert(nImages);
});
但是,這不是一個很好的解決方案,因為如果加載腳本時出錯,它將無限期地繼續輪詢。
編輯
您在評論中發布了要包含的文件,該文件的頂部為<SCRIPT
。 該文件無用,並且您無法在客戶端執行任何操作。 您必須編寫服務器端腳本以將文件加載為文本,在這種情況下,您可以將其解析為所需的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.