2016-07-17 5 views
1

В Safari, когда replaceStatewill be called more than 100 times, он будет бросать:OS X и IOS Safari history.replaceState ограничения бросков SecurityError: DOM Exception 18

SecurityError: DOM Exception 18: An attempt was made to break through the security policy of the user agent.

Подробнее: 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.

ответ

0

Вы считали, что вы пробиваете событие прокрутки?

т.д .:

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

Cheers, Raoul