Переопределение history.pushState приводит к ошибке в опере 11 - PullRequest
3 голосов
/ 25 января 2011

Я внедряю следующий код в веб-страницу с помощью сценария / расширения greasemonkey, чтобы перехватить команду history.pushState, поэтому я могу выполнять некоторую обработку всякий раз, когда она запускается, и, тем не менее, позволяю команде pushState продолжать работу впоследствии.1003 *

(function(history){
  var pushState = history.pushState;
  history.pushState = function(state) {
       if (typeof history.onpushstate == "function") {
          history.onpushstate({state: state});
        }
        alert('pushstate called')
        return pushState.apply(history, arguments);
  }
})(window.history);

код отлично работает в FF4 и Chrome, но в Opera 11 я получаю следующую ошибку, если на странице вызывается команда history.replaceState:

Неопределенное исключение:Ошибка типа: 'window.history.replaceState' не является функцией

Кто-нибудь знает, как я могу исправить приведенный выше код для работы с Opera, а также с Chrome и Firefox?

Ответы [ 3 ]

4 голосов
/ 25 января 2011

В Opera 11.00, Revision 1156 поддерживаются следующие API истории:

>>> history.
back, current, forward, go, length, navigationMode

Полный API истории HTML5 еще не поддерживается Opera 11.00. В общем, если вы хотите узнать, узнать, что поддерживается, вы можете легко использовать консольный режим dragonfly , инструмент веб-разработчика.

1 голос
/ 25 января 2011

Согласно Когда я могу использовать… Opera еще не поддерживает History API, поэтому вы получаете это исключение.

0 голосов
/ 25 января 2011

Я разобрался с решением, просто проверьте history.replacestate перед выполнением вышеуказанного кода, если он не существует, не выполняйте код, просто.

...