我目前正在开发一个jQuery移动应用程序。在一个页面上有一个图表(高图),然后可以导出(canvg和canvas2ImagePlugin)。但是,我注意到图表对象保留在内存中。这样做的结果是,如果多次打开页面并按下导出按钮,则会导出先前生成的所有图形。
看看Chrome Dev Tool的堆快照,我发现所有对象都留在内存中。为了演示这一点,我在jsfiddle上做了一个非常基本的应用程序,将所有的高级代码和密码代码排除在外:http://jsfiddle.net/dreischer/Lt4Xw/ - >只需点击按钮即可进入第二页。如果你点击导出按钮,弹出窗口会打开。但是,如果您返回到第一页然后再按第二页并再次单击该按钮,则会打开两个弹出窗口(您可能需要允许弹出窗口)。jQuery Mobile对象留在内存中
我也尝试设置analyseGraph null或undefined或在pagebeforehide上使用.remove(),但它没有帮助。
谢谢你的帮助!
下面是代码,在这个例子:
HTML:
<div data-role="page" id="p1">
<div data-role="header"><h1>Header Page 1</h1></div>
<div data-role="content">
<p>Page 1</p>
<a href="#p2" data-role="button">Go To Page 2</a>
</div>
</div>
<div data-role="page" id="p2">
<div data-role="header" data-rel="back"><h1>Header Page 2</h1></div>
<div data-role="content">
<p>Page 2</p>
<a href="#p1" data-role="button">Go To Page 1</a>
<a id="export_graph" data-role="button" style="max-width: 300px;" data-mini="true">Export</a>
</div>
</div>
的Javascript:
$(document).on('pagebeforeshow', '#p2', function(){
var Graph = function(){
this.drawGraph = function(){};
this.exportCanvas = function(){
window.open();
};
}
var analyseGraph = new Graph();
analyseGraph.drawGraph();
$(document).on('click', '#export_graph', function(){
analyseGraph.exportCanvas();
});
});