0

我有一个历史 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 子句适用于我拥有的滚动加载器。我有两个滚动加载器,因此每次都需要解除和绑定滚动事件。不过,无需担心。

4

1 回答 1

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% 正确的。

于 2013-05-27T13:44:55.513 回答