Как мне заставить IE9 работать с historyapi в этом приложении symfony, используя history.js, modernizr и / или shim?
У меня есть приложение, основанное на symfony2, и я включаю в него как shim, так и modernizr, а также history.js.
Мое приложение отлично работает в FF, но когда я запускаю его в IE, оно жалуется на метод pushState.
SCRIPT438: Объект не поддерживает свойство или метод "pushState" 2109519_appHistory_9.js, строка 114, символ 9
Вот пример того, что я делаю:
$(document).ready(function () {
"use strict"; //makes this entire object strict
app.hist.init(); //init any code on this page
});
//Self-Executing Anonymous Function (Public & Private)
(function (hist, $, undefined) {
app.hist.init = function () {
if(history){
console.log('we have history');
console.log(history);
} else if(Modernizr.history){
console.log('Modernizr.history');
console.log(Modernizr.history);
} else {
console.log('no modernizr history');
}
app.hist.title = document.title;
app.hist.url = document.URL;
window.addEventListener("popstate", function(e) { // or jquery $(window).on("popstate", function (e) {
app.hist.popState(e);
});
};
// Bind to StateChange Event
app.hist.bindHistory = function(){
History.Adapter.bind(window,'statechange',function(){ // Note: We are using statechange instead of popstate
app.hist.state = History.getState();
});
};
app.hist.add = function () {
app.hist.title = document.title;
history.pushState( app.hist.state, app.hist.title, app.hist.url);
};
}(window.app.hist = window.app.hist || {}, jQuery));
console.logs дают это
SCRIPT5007: Object expected 0438675_head_1.js, line 1 character 3164
LOG: we have history
LOG: [object History]
SCRIPT438: Object doesn't support property or method 'pushState' 2109519_appHistory_9.js, line 114 character 9
Обратите внимание, я поместил туда метод привязки. Я нашел это здесь: используя history.js с IE9
Здесь я думаю, что мне нужна помощь, потому что в этом посте не было достаточно информации, чтобы я мог понять, как правильно связать "все", что необходимо, так что это будет работать в полном объеме, например, не только его состояние, но и заголовок, и URL, я даже не знаю, как получить заголовок и URL, используя History
Я не вижу никаких методов для этого, я вижу только History.getState()
Я думаю, что должно быть History.getTitle()
где-то https://github.com/browserstate/history.js/ тоже не должно быть?
1) Нужно ли привязывать historyjs как это к IE или что-то?
2) Посмотрите, что связывает метод, и скажите мне, если я должен использовать его в init, как я подозреваю
3) Пожалуйста, помогите мне выяснить, что мне нужно внутри этого метода связывания, чтобы получить эту границу правильно.
РЕДАКТИРОВАТЬ: ОК, я вижу одну проблему, History.getState()
, но это объект со всеми 3, состояние, название, URL, WTF? Хорошо, тогда у меня есть доступ к моим материалам здесь..
Так что я думаю, что bindHIstory будет выглядеть больше так? app.hist.bindHistory = function(){
History.Adapter.bind(window,'statechange',function(){ // Note: We are using statechange instead of popstate
var data = History.getState();
app.hist.state = data.state;
app.hist.title = data.title;
app.hist.state = data.url;
});
};
Итак, все же, те же 3 вопроса выше, пожалуйста.