在Safari中replaceState
will be called more than 100 times时,它将抛出:
安全错误:DOM例外18:试图突破用户代理的安全策略。
更多信息:https://forums.developer.apple.com/thread/36650
我的问题是,在某些特定条件下,我改变URL时,用户滚动(使用$(window).scroll(function() {...
。正如你可能猜到的,我达到了100在不到2秒的限制。history.replaceState({}, '', newStringWithURLToUpdateInClientBrowser);
有什么解决办法吗?允许管理history
的现有库可以解决这个问题吗?
所有其他浏览器都不受此问题的影响。只有Webkit。下面是查看错误的小提琴:https://jsfiddle.net/j1sxxLwy/
在Chrome中它会达到100,但尝试在Safari中运行它。
2条答案
按热度按时间idfiyjo81#
不幸的是,如果您只是简单地捕捉到错误,那么在某些时期,所有
replaceState
调用都将被忽略,您的URL将完全停止更新。唯一的解决办法似乎是将对
replaceState
的调用限制在每300毫秒以内(Chrome和Firefox似乎同样需要50毫秒的限制)。history-throttled软件包是
history.replaceState
和history.pushState
的直接替代产品,可自动为您应用适当的限制量。(披露:我是作者。)kpbpu0082#
你有没有考虑过扼杀滚动事件?
例如:
干杯劳尔