2011-01-25 2 views
3

J'injecte le code suivant dans une page Web via une extension greasemonkey script/opera pour intercepter la commande history.pushState, donc je peux faire un peu de traitement à chaque fois qu'il est déclenché et permettre pushState commande de continuer après.Substituer history.pushState conduit à une erreur dans l'opéra 11

(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); 

le code fonctionne très bien dans FF4 et Chrome, mais dans Opera 11, je reçois l'erreur suivante, si la page appelle une commande history.replaceState:

Uncaught exception: TypeError: 'window.history.replaceState' is not a function

Est-ce que quelqu'un sait comment je peux résoudre la code ci-dessus pour travailler avec Opera ainsi que Chrome et Firefox?

Répondre

1

Selon When can I use … Opera ne prend pas encore en charge l'API d'historique, c'est pourquoi vous obtenez cette exception.

+0

ressource cool, ne l'avait pas rencontré avant – user280109

0

J'ai trouvé la solution, il suffit de vérifier history.replacestate avant d'exécuter le code ci-dessus, si elle n'existe pas, n'exécutez pas le code, simple.

+0

je suis l'auteur, pourquoi aurais-je besoin de critiquer ou demander des éclaircissements de moi-même? – user280109

+0

'Est-ce que quelqu'un sait comment je peux réparer le code ci-dessus pour travailler avec Opera ainsi que Chrome et Firefox?'. Cela ne fournit pas de réponse à la question, mais l'évaluateur exclut la méthode si elle n'est pas prise en charge. – andlrc

4

Dans Opera 11.00, Révision 1156, l'API d'histoire sont pris en charge ces

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

Le HTML5 history API complet est pas encore couvert par Opera 11.00. En général, si vous souhaitez découvrir, explorer ce qui est pris en charge, vous pouvez facilement utiliser le mode console de dragonfly, l'outil de développement Web.

Questions connexes