OS X 和 iOS Safari 历史记录。replaceState 限制抛出 SecurityError:DOM 异常 18

Mat*_*cki 8 javascript safari macos browser-history ios

在 Safari 中,当replaceState 调用超过 100 次时,会抛出:

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

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

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

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

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

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

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

Rao*_*oul 0

您是否考虑过限制滚动事件?

例如:

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

干杯,拉乌尔