![](/img/trans.png)
[英]jQuery ajax load function doesn't include custom javascript file
[英]How to include jQuery in remote Javascript file only if site doesn't have jQuery?
我有一個腳本(embed.js),該腳本已從其他網站/域中包含。 例如:
<script type="text/javascript" src="//mydomain.com/embed.js"></script>
該腳本中的代碼依賴jQuery,但顯然並非每個網站都使用jQuery。 因此,我將此代碼放在頂部的embed.js腳本中:
if (typeof jQuery == 'undefined') {
var jq = document.createElement('script');
jq.type = 'text/javascript';
jq.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js';
document.getElementsByTagName('head')[0].appendChild(jq);
jQuery.noConflict();
}
但是,我收到有關未為noConflict()行定義“ jQuery”的錯誤。 它確實是在頁面上添加了jQuery標記/代碼,但是由於某些原因,在該appendChild()行之后,以下noConflict()行無法識別jQuery。
如何僅通過遠程Javascript文件在頁面上未包含jQuery,然后在同一Javascript文件中使用我剛包含的jQuery? (所有這些都需要通過一個文件完成。)
您會收到此錯誤,因為用於加載jQuery的方法是異步加載的,因此,當您嘗試執行.noConflict()
行時,尚未加載jQuery。
如果您的代碼還在初始化時嘗試使用jQuery(如果您的代碼也沒有異步加載),則可能會遇到類似的問題。
如果您需要同步加載jQuery(一種簡單的解決方案,但可能不是首選),則可以使用document.write()
實際編寫腳本標簽來加載jQuery,然后瀏覽器將對其進行同步處理。
您還可以通過某種方式加載jQuery,該方式會在實際加載時通知您,此時您可以運行.noConflict()
行,然后調用使用jQuery的自己的初始化代碼。 這可能是最自包含的機制,避免了document.write()
可能會減慢某些現代瀏覽器的加載過程document.write()
在某些情況下使用document.write()
阻止某些加載優化)。
例如,您可以使用此函數加載jQuery,然后在成功加載后調用回調:
function loadScript(sScriptSrc, oCallback) {
var oHead = document.getElementsByTagName('head')[0];
var oScript = document.createElement('script');
oScript.type = 'text/javascript';
oScript.src = sScriptSrc;
// most browsers
oScript.onload = oCallback;
// IE 6 & 7
oScript.onreadystatechange = function() {
if (this.readyState == 'complete') {
oCallback();
}
}
oHead.appendChild(oScript);
}
loadScript("jquery.js", function() {
jQuery.noConflict();
// call your own initialization function that uses jQuery here
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.