如何使用history.js,modernizr和shim在这个symfony应用程序中使用IE9来使用historyapi?

时间:2015-03-27 21:35:22

标签: internet-explorer-9 backwards-compatibility history.js

我在这里有一个应用程序,基于symfony2,我包括一个垫片和现代化器,以及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

注意,我在那里放了一个绑定方法。我在这里找到了:using history.js with IE9
这是我认为我需要帮助的地方,因为该帖子不足以让我弄清楚如何正确绑定到所需的“一切”所以这将完全有效,而不仅仅是他的状态,例如,但是标题,以及url,我甚至不知道如何使用History获取标题和网址,我没有看到任何方法,我只看到History.getState(),我认为应该有History.getTitle()在某个地方https://github.com/browserstate/history.js/#exposed-api,也不应该有吗?

1)我是否需要将这样的historyjs绑定到IE或其他东西?

2)看看那个绑定方法,告诉我是否应该在init中使用它,就像我怀疑

一样

3)请帮我弄清楚我在bind方法中需要什么才能正确绑定。

修改: 好的,我看到一个问题,History.getState(),但它是一个所有3,状态,标题,网址,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个问题。

0 个答案:

没有答案