我有一个历史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,因此每次都需要将滚动事件解除绑定并绑定。不过不用担心。
答案 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%语法正确。