后续脚本加载是否有可能删除早期脚本中已加载的函数?
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();
});
在一页上,这工作正常。在另一页上,事件一发生,我就得到以下信息:
Uncaught TypeError: $(...).tooltip is not a function
在有效的页面上,我已经能够确定(通过暂停和进入).tooltip()
是 jquery.tools.min.js
的一部分
Edit/Update3(删除了 1 和 2,因为它们可能具有误导性)
这两个页面都来自实现类似在线论坛的应用程序的不同部分
在一切正常的页面上,只有来自论坛用户的消息和他们的头像。在不起作用的页面上,该页面还包括一个用 javascript 和 html5
编写的 statistics/graph 绘图设备
我注意到,通过在调试器中每个页面的 document.ready
中的相同点暂停,在工作页面上,jQuery 是版本 1.8.3 和所有方法jquery-工具可调用
页面显示不对,jQuery版本为1.9.1
我的推测是,包括 statistics/bar 图形绘制设备已经完全替换了页面中较早加载的 jquery1.8.3+jquery-tools 库,jquery1.9.1+NO_TOOLS,因此选择器仍然有效(jquery 的工作)但 .tooltip()
功能(jquery-工具工作)现在的原因缺席
虽然我不太确定该怎么做 - 拥有一个具有自己的 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
。
您可以像这样动态地执行此操作 ():
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
的副本和版本。
我对内容非常相似的两个页面之间的差异感到困惑。两个页面加载同一组脚本:
<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();
});
在一页上,这工作正常。在另一页上,事件一发生,我就得到以下信息:
Uncaught TypeError: $(...).tooltip is not a function
在有效的页面上,我已经能够确定(通过暂停和进入).tooltip()
是 jquery.tools.min.js
Edit/Update3(删除了 1 和 2,因为它们可能具有误导性)
这两个页面都来自实现类似在线论坛的应用程序的不同部分
在一切正常的页面上,只有来自论坛用户的消息和他们的头像。在不起作用的页面上,该页面还包括一个用 javascript 和 html5
编写的 statistics/graph 绘图设备我注意到,通过在调试器中每个页面的 document.ready
中的相同点暂停,在工作页面上,jQuery 是版本 1.8.3 和所有方法jquery-工具可调用
页面显示不对,jQuery版本为1.9.1
我的推测是,包括 statistics/bar 图形绘制设备已经完全替换了页面中较早加载的 jquery1.8.3+jquery-tools 库,jquery1.9.1+NO_TOOLS,因此选择器仍然有效(jquery 的工作)但 .tooltip()
功能(jquery-工具工作)现在的原因缺席
虽然我不太确定该怎么做 - 拥有一个具有自己的 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
。
您可以像这样动态地执行此操作 ():
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
的副本和版本。