Javascript 放弃一个函数或.js文件及其";“影响”;
我正在使用AJAX来更改页面的内容,因此每个页面都有自己的函数和.js文件 因此,图形插件仅在页面上有图形的情况下加载,但这些插件看起来会一直保留到刷新,这会在内容更改且页面上不再有图形时导致错误 我将这段代码用于我的AJAX调用(我认为它会丢弃函数和加载的插件,但现在看起来好像没有): 现在的问题是(不仅仅是这个图形插件),如果一个页面加载raphael.js(一个插件)并绘制一些图形,那么当内容改变并且没有图形时,我调整浏览器的大小会给我一系列错误,这些错误与没有图形的事实有关(或它们的容器div),但由于插件和函数已加载,它仍尝试绘制它们。 (编辑插件不是一个好主意,因为它是一个模板,我有6到7个插件) TL;DR:Javascript 放弃一个函数或.js文件及其";“影响”;,javascript,jquery,html,ajax,Javascript,Jquery,Html,Ajax,我正在使用AJAX来更改页面的内容,因此每个页面都有自己的函数和.js文件 因此,图形插件仅在页面上有图形的情况下加载,但这些插件看起来会一直保留到刷新,这会在内容更改且页面上不再有图形时导致错误 我将这段代码用于我的AJAX调用(我认为它会丢弃函数和加载的插件,但现在看起来好像没有): 现在的问题是(不仅仅是这个图形插件),如果一个页面加载raphael.js(一个插件)并绘制一些图形,那么当内容改变并且没有图形时,我调整浏览器的大小会给我一系列错误,这些错误与没有图形的事实有关(或它们的容器
是否有一种方法可以丢弃插件和某些函数,从而取消它们调用的所有其他事件(它停止尝试绘制这些图形)?
currentScripts.remove();
只删除脚本
标记,而不删除此标记加载/执行的脚本。脚本在内存中的保留时间至少与没有引用它们的时间一样长。因此,您需要为每个插件添加一个清理功能,如果您卸载它们,这些插件必须由您调用。@t.niese这就是我正在搜索的内容r、 你能把我链接到这样一个清理功能吗?我搜索了两天,没有看到任何有用的东西…有很多方法可以解决这个问题,这在很大程度上取决于你的项目结构、你如何加载/管理你的脚本以及你如何组织你的代码。最好的方法可能是使用一个支持req的加载程序uire
语法,如webpack或requirejs,使用currentPlugin=require('plugin-name');currentPlugin.init();
加载您的插件,并使用currentPlugin.cleanup()清理插件(如果已设置)
仅仅删除函数是不够的。如果脚本设置了事件处理程序,那么所有这些都需要删除。您需要设计动态页面,以便加载的每个东西都知道如何清理自己。没有内置的工具可以做到这一点。这可能会有所帮助:
$.get(urlPath, function(html) {
var doc = $(html);
var currentScripts = $('.current-scripts'); // this is the div with plugins and functions for a specific page
currentScripts.remove();
currentScripts = undefined;
$('.content').empty().css('opacity', '0').append(doc.children('.content >*'));
$('.scripts').append(doc.children('.current-scripts'));
... // some more not related stuff
};