我正在开发一个包含许多运行超时和间隔的ajax web应用程序.现在我需要清除所有正在运行的超时和间隔.是否有一种简单的方法来阻止所有内容而无需存储每个超时和间隔ID并迭代它们并清除它们?
我在用
varName = setInterval(function() { ... }, 1000);
Run Code Online (Sandbox Code Playgroud)
在我正在编写的jquery插件中设置几个间隔,但是当重新加载插件时,我需要清除这些间隔.我尝试将它们存储在变量中,如下所示:
(function($){
$.mosaicSlider = function(el) {
var base = this;
var transitionInterval, mainInterval;
...
base.init = function() {
mainInterval = setInverval(function() { ... }, 1000);
}
base.grid = function() {
this.transition() = function() {
transitionInterval = setInterval(function(...) {
}
}
base.init();
Run Code Online (Sandbox Code Playgroud)
我尝试在base.init()函数中杀死这些间隔,如下所示:
clearInterval(transitionInterval);
clearInterval(mainInterval);
Run Code Online (Sandbox Code Playgroud)
像这样:
window.oldSetInterval = window.setInterval;
window.setInterval = new function(func, interval) { }
Run Code Online (Sandbox Code Playgroud) 我们正在构建一个带有音频播放器的Drupal站点,该站点应该在您浏览页面时继续播放(类似于soundcloud).
目前我们正在<a>使用ajax 加载clicked 的网站并将html注入页面并使用history.js来操作该位置.
但是有一个主要的缺点:
由于新加载的页面上可能有不同的css和js,我们必须将当前脚本,样式和链接元素与ajax响应文本(丑陋的正则表达式)进行比较,并且只添加新的但不存在的元素.通过这样做,加载另一个页面一旦执行脚本就不会删除/删除/撤消.这可能会成为一个性能问题(反正是针对标记的正则表达式).
使用iframe可以解决这个问题和其他问题:
首次单击站点上的链接时,页面内容将替换为仅加载页面的iframe.音频播放器位于原始dom中,即在iframe之外.单击iframe内的链接可以在历史API中捕获并使用.
所以,虽然我从未想过我会这么认为:我认为使用iframe可能是更好的选择,不是吗?
PS:我的主要问题是我无法控制网站上的不同页面有不同的脚本,样式确实没问题.如果网站上只有一个巨大的静态js和css,我没有遇到任何问题.
更新
除了在iOS中,iframe解决方案工作正常.iframes就像地狱一样.不过,我认为我们将采用iframe解决方案.