【问题标题】:Backbone history pushstate to hashtag IE9骨干历史 pushstate 到 hashtag IE9
【发布时间】:2015-07-12 19:14:57
【问题描述】:

我有以下代码检查 pushstate 并在不受支持时降级为 hashbang (IE9):

if(Backbone.history && !Backbone.History.started) { 
    if(!(window.history && history.pushState)) { 
        Backbone.history.start({ pushState: false, silent: true}); 
        var fragment = window.location.pathname.substr(
            Backbone.history.options.root.length); 
        var search = window.location.search; 
        Backbone.history.navigate(fragment + search, { trigger: true });
    }
    else {
        Backbone.history.start({ pushState: true });
    }
} 

它在功能上可以工作,但是 URL 是从以下位置转换的:

http://dev.zwoop.be/home?page=1

http://dev.zwoop.be/home?page=1#home?page=1

看起来很丑。
我正在寻找一个简单的修复方法,用主题标签替换主机名后面的整个片段。

【问题讨论】:

    标签: javascript backbone.js


    【解决方案1】:

    尝试替换

    Backbone.history.navigate(fragment + search, { trigger: true });
    

    通过

    var modified = (fragment + search).replace(/([^\/]*)(#[^#]*)$/g, '$2');
    Backbone.history.navigate(modified, { trigger: true });
    

    它将http://dev.zwoop.be/home?page=1#home?page=1 转换为http://dev.zwoop.be/#home?page=1

    【讨论】:

    • 谢谢,但它给了我相同的结果。出于某种原因,它只是在已经存在的整个路径(包括片段和查询字符串)后面添加了作为主题标签导航的任何内容。
    • 现在我想起来了,这种行为可能有一个正当的理由:如果 IE9 用户使用支持 HTML5 History 的浏览器向其他人发送链接(或打开相同的链接),路由器不会考虑 hashbang 部分来解析路由。这意味着http://dev.zwoop.be/home?page=1#home?page=1 可以在非IE9 浏览器中运行,而http://dev.zwoop.be/#home?page=1 则不行。
    • 嗯,好点。但是,当 pushstate 可用时,难道不应该有办法通过用斜杠替换 hashbang 来克服这种行为吗?
    • 可能。最好自己实现路由器,而不是破解 Backbone 路由器。
    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    相关资源
    最近更新 更多