[英]Is it possible for a subsequent script load to remove an already-loaded function in an earlier script?
在內容非常相似的兩個頁面之間,我有一個令人費解的區別。 兩個頁面都加載相同的腳本集:
<script type="text/javascript" src="scripts/modernizr.min.js"></script>
<script type="text/javascript" src="scripts/jquery.min.js?v=1.8.3"></script>
<script type="text/javascript" src="scripts/jquery.colorbox.min.js"></script>
<script type="text/javascript" src="scripts/jquery.tools.min.js"></script>
<script type="text/javascript" src="scripts/URI.js"></script>
然后他們有這個$(document).ready()
:
$(document).ready(function () {
$(".profileImage").tooltip({
position: 'top right',
relative: true,
offset: [50, 0]
}).dynamic();
});
在一頁上,這可以正常工作。 在另一頁上,事件觸發后,我會得到以下信息:
未捕獲的TypeError:$(...)。tooltip不是函數
在有效的頁面上,我已經能夠確定(通過暫停並進入) .tooltip()
是jquery.tools.min.js
一部分
編輯/更新3 (刪除了1和2,因為它們可能會誤導人)
這兩個頁面都來自應用程序的不同部分,該部分實現了類似於在線論壇的內容
在一切正常的頁面上,僅是來自論壇用戶的消息以及他們的頭像。 在無效的頁面上,該頁面還包含以javascript和html5編寫的統計數據/圖形繪制設備
我注意到,通過在每一頁的相同點暫停document.ready
在調試器,該網頁上的作品,jQuery是1.8.3版本,並全部由jQuery的工具方法可用於通話
在不起作用的頁面上,jQuery版本為1.9.1
我的推測是,包括統計信息/條形圖繪制設備在內的頁面早先已用jquery1.9.1 + NO_TOOLS完全替換了頁面中早先加載的jquery1.8.3 + jquery-tools庫,因此選擇器仍然有效(jquery的工作)但.tooltip()
函數(jquery-tools作業)現在不存在
我不是很確定該怎么做-擁有自己的jquery設置的頁面,然后在頁面上包含還使用並加載jquery(不同版本)等的其他東西的正常解決方案是什么?
jQuery.fn.tooltip = null
或jQuery.fn.tooltip = undefined
,甚至delete jQuery.fn.tooltip
將刪除以下演示中已降級的功能:
<!DOCTYPE html> <html lang="en"> <head> <title>Reduxtagram</title> </head> <body> <h1>messages</h1> <div id="messages-placeholder"></div> <h1>Errors</h1> <div id="errors-placeholder"></div> <script> function html(id, inner){ var el = document.getElementById(id); el.innerHTML += inner + " ------------------- "; } function logError(error){ html("errors-placeholder", error); } function logMsg(msg){ html("messages-placeholder", msg); } var myNamespace= {}; myNamespace.myFunctionToNull = function(){ logMsg("myFunctionToNull was called"); }; myNamespace.myFunctionToUndefined = function(){ logMsg("myFunctionToUndefined was called"); }; myNamespace.myFunctionToDelete = function(){ logMsg("myFunctionToDelete was called"); }; myNamespace.myFunctionToNull(); myNamespace.myFunctionToUndefined(); myNamespace.myFunctionToDelete(); myNamespace.myFunctionToNull = null; myNamespace.myFunctionToUndefined = undefined; delete myNamespace.myFunctionToDelete; try{ myNamespace.myFunctionToNull(); } catch(e) { logError(e); } try{ myNamespace.myFunctionToUndefined(); } catch(e) { logError(e); } try{ myNamespace.myFunctionToDelete(); } catch(e) { logError(e); } </script> </body> </html>
您應該找到腳本的哪一部分刪除了tooltip
功能並進行了更正。
您也可以嘗試對腳本重新排序,例如,將<script type="text/javascript" src="scripts/jquery.tools.min.js"></script>
放在最后一個位置。
如果重新加載jQuery
,它將替換$
別名和jQuery
名稱空間,因此jQuery.fn.tooltip
將不再存在。
您應該嘗試在重新加載jQuery 1.9.1
之后重新加載jQuery.toolbox
。
您可以這樣動態地執行此操作( https://stackoverflow.com/a/950146/2776550 ):
function loadScript(url, callback)
{
// Adding the script tag to the head as suggested before
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = url;
// Then bind the event to the callback function.
// There are several events for cross browser compatibility.
script.onreadystatechange = callback;
script.onload = callback;
// Fire the loading
head.appendChild(script);
}
var myPrettyCode = function() {
// Here, do what ever you want
};
loadScript("my_lovely_script.js", myPrettyCode);
盡管如此,您應該努力在應用程序中只有一個副本和jQuery
版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.