OS X& iOS Safari history.replaceState限制抛出SecurityError:DOM Exception 18

时间:2016-07-17 09:38:53

标签: javascript ios macos safari browser-history

replaceState will be called more than 100 times的Safari中,它会抛出:

  

SecurityError:DOM异常18:尝试突破   用户代理的安全策略。

更多信息:https://forums.developer.apple.com/thread/36650

我的问题是,在某些特定情况下,我会在用户滚动时更改网址(使用$(window).scroll(function() {...。正如您猜测的那样,我会在不到2秒的时间内达到100的限制。

history.replaceState({}, '', newStringWithURLToUpdateInClientBrowser);

这有什么解决方法吗?允许管理history的现有库可以解决这个问题吗?

所有其他浏览器都不受此问题的影响。只有Webkit。 这是查看错误的小提琴:https://jsfiddle.net/j1sxxLwy/

在Chrome中,它会达到100,但请尝试在Safari中运行。

1 个答案:

答案 0 :(得分:1)

您是否考虑过滚动事件?

E.g:

var timer = null;
$( window ).scroll( function() {
    clearTimeout( timer );
    timer = setTimeout( function() {
        history.replaceState( {}, '', newStringWithURLToUpdateInClientBrowser );
    }, 1000 );
} );

干杯,拉乌尔