2016-02-04 2 views
0

Я смотрю на этот фрагмент кода яваскриптаTypeError: «replaceState» называется на объект, который не реализует интерфейс истории

if (history) { 
    var action = settings.replaceState ? history.replaceState : history.pushState; 
    if (action) { 
     // next line throws the error 
     action(null, null, window.location.pathname + window.location.search + '#' + hash); 
    } 
} 

settings.replaceState == истинной

последняя вещь Microsoft дает мне это

Invalid calling object

В Chrome тот же кусок кода бросает этот

Uncaught TypeError: Illegal invocation

и я получаю эту ошибку в Firefox

TypeError: 'replaceState' called on an object that does not implement interface History.

Когда я отлаживать история выглядит так, как она должна и есть прототип, содержащий этот метод в нем.

Помимо различных сообщений об ошибках, кто-нибудь может рассказать мне, что здесь происходит?

ответ

3

Вы потеряли контекст выполнения history, назначив метод переменной. Вы должны установить контекст выполнения обратно history с помощью call/bind

action.call(history,null, null, 
      window.location.pathname + window.location.search + '#' + hash); 
+0

спасибо, я подозревал, как много – Peter