我正在通过ajax加载页面。整个页面包括<html> <head> <body>
。
所以我需要调用所有应该在页面加载时调用的脚本。但浏览器记得其中一些已经加载到这个窗口,他不会再次执行它们。
如何删除所有已加载的脚本?
或者更好的是,如何加载整个页面,但是有一些旧对象在前一页的后台工作?例如上传和其他通信。
代码:
this.load = function(adr)
{
this.iris();
$.ajax({
type: 'GET',
url: adr,
dataType: 'html',
success: function(data)
{
$("body").html(html);
}
});
编辑: 对不起,伙计们,我写错了可能,因为你的答案很好,但解决别的问题,我可以自己解决。所以我会试着以不同的方式说出来。
我无法将初始化保存到函数或其他任何内容
为什么 - 因为我正在使用一些模板,每个模板都有插件中的JS(for forms,callendar ..)文件。 每个插件在加载的脚本上立即通过匿名函数初始化。
因此,当我通过ajax加载HTML时,它不会在这个新的HTML上初始化。 (例如,找不到并且不会添加监听器)。
答案 0 :(得分:3)
执行脚本时,即使替换整个DOM,也无法取消执行该脚本并将其保留在范围内。
因此,如果您创建对象window.a = new A();
并将DOM替换为$('body').html(html);
,则该对象仍可以window.a
进行访问。
更新
我想你的脚本定义包含在<head>
中,你可以在一个地方调用它们。
<!DOCTYPE html>
<html>
<head>
<script src="script1.js"></script>
<script src="script2.js"></script>
</head>
<body>
... content ...
<script>
window.onload = function () {
// initialization code here
};
</script>
</body>
</html>
将初始化<script>
放在头部,同时将function
存储在变量中。然后,当您加载新内容时,只需替换<body>
的内容并调用该函数。
<!DOCTYPE html>
<html>
<head>
<script src="script1.js"></script>
<script src="script2.js"></script>
<script>
var a = function () {
// initialization code here
};
var load = function (adr) {
$.ajax({
type: 'GET',
url: adr,
dataType: 'html',
success: function (data) {
data = data.exec(/<body[^>]*?>(.*)<\/body>/i);
$("body").html(data);
a(); // call the function after each load
}
});
};
</script>
</head>
<body onload="a()">
... content ...
</body>
</html>
答案 1 :(得分:1)
“未执行”脚本的唯一方法是首先将其设计为这样。
这并不是特别难,但它需要一些知识 - 没有神奇的开关可以打开它。
例如......
<强>的index.html 强>
<script src="script1.js"></script>
<script src="script2.js"></script>
<script> alert(pie); </script>
<强> script1.js 强>
var pie = 'Hello world!';
<强> script2.js 强>
var pie = 'Hello cruel world!';
简而言之,一个重要的先决条件是将所有代码保存在一个入口点中,以后可以轻松覆盖/删除。
答案 2 :(得分:0)
不是将初始化代码直接放在脚本中以便立即执行,而是将其放入函数中,然后根据需要调用该函数。
包括这一次:
function initialize() {
alert('(Re)initializing');
}
然后,无论何时“重新加载”该页面,只需再次呼叫initialize()
。