停止jQuery评估已经执行的脚本

时间:2013-05-27 13:40:36

标签: javascript jquery

我有一个历史API脚本,可以加载新的页面内容,而无需刷新页面。我遇到了内联脚本的问题,即使之前已经完成了脚本,脚本也会被jQuery评估。因此,例如,如果有人重新访问带有内联脚本的页面,则每次重新访问时都会执行脚本。如果在脚本中添加DOM元素,则会导致问题,如果多次访问该页面,则会多次添加该元素。

由于我不会进入的原因,我不能将这些内联脚本放入外部文件并以这种方式加载它们。

这是处理脚本的编码;

dom.filter('script').each(function(){//function to allow inline javascript, has to be after page fadeIn incase scripts reference page DOM

    $.globalEval(this.text || this.textContent || this.innerHTML || '');
    var script_src = ($(this).attr('src'));

    if (script_src === 'AJAX/request_feed.js' || script_src === 'js/profile.js'){
        $(window).unbind('scroll');
        $.getScript(script_src);
    }

});

如果您需要整个历史记录脚本中的任何其他部分,请询问。我不认为他们是必需的。

注意:我有一个滚动加载器的if子句。我有两个scroll_loaders,因此每次都需要将滚动事件解除绑定并绑定。不过不用担心。

1 个答案:

答案 0 :(得分:2)

您可以将执行的脚本存储在cookie中,然后在执行前检查cookie。不管怎样,你需要一些方法来跟踪已执行的内容和未执行的内容。

替代建议

您可以调整脚本以进行自我调节:

myscript.js:

(function(){
   if ($(this).parent().script_registry.inArray('myscript')) return false;
   $(this).parent().script_registry.push('myscript');  // Register this script as launched

   alert('Do stuff..');
});

注意:上述代码可能不是100%语法正确。