jQuery History Plugin替换URL错误

时间:2011-08-24 13:58:26

标签: jquery html history

所以我使用的是jQuery History插件(http://tkyk.github.com/jquery-history-plugin/)。 另外,我编写了下面的脚本来切换页面。

$(document).ready(function() {

    // Define the default pagetitle.
    var defaultTitle = "MySite / ";

    // Set a default pagetitle.
    document.title = defaultTitle + "Homepage";

    // Switch the page.
    function load(page) {
        $("#contentHolder").fadeOut("fast",function(){
            $('#contentHolder').load("content/"+ page +".php");
            $("#contentHolder").fadeIn("fast");
        });
    }

    // Function to shorten the scriptsize.
    function reduceSize(mainUrl) {
        // Define the URL.
        var url = mainUrl;
        // Replace the URL in the address bar.
        url = url.replace(/^.*#/, '');
        // Load the page.
        $.history.load(url);
        return false;
    }

    // Enable history.
    $.history.init(function(url) {
        load(url == "" ? "general/homepage" : url);
    });

    // Make the menu useful.
    $('.switch_homepage').live('click', function(e) {
        reduceSize("general/homepage");
        document.title = defaultTitle + "Homepage";
    });

});

我的问题是每当我点击“主页”按钮时,页面都会切换到: http://www.domain.com/#general%2Fhomepage 虽然它应该切换到 http://www.domain.com/#general/homepage

有人能弄明白为什么它将斜杠转换为HTML格式吗?

感谢。

1 个答案:

答案 0 :(得分:2)

查看插件源代码(https://raw.github.com/tkyk/jquery-history-plugin/master/jquery.history.js),看起来它正在为您进行编码。

function initObjects(options) {
    options = $.extend({
            unescape: false
        }, options || {});

    locationWrapper.encoder = encoder(options.unescape);

    function encoder(unescape_) {
        if(unescape_ === true) {
            return function(hash){ return hash; };
        }
        if(typeof unescape_ == "string" &&
           (unescape_ = partialDecoder(unescape_.split("")))
           || typeof unescape_ == "function") {
            return function(hash) { return unescape_(encodeURIComponent(hash)); };
        }
        return encodeURIComponent;
    }

    function partialDecoder(chars) {
        var re = new RegExp($.map(chars, encodeURIComponent).join("|"), "ig");
        return function(enc) { return enc.replace(re, decodeURIComponent); };
    }
}

您可以尝试在初始化中设置unescape: true选项,看看是否有效。