2

我在我的网络应用程序中使用 jquery.history 插件并且遇到了“/”被转义的问题,所以例如我需要生成以下 URL

/SomeAction#Resource/ResOne

但得到了

/SomeAction#Resource%F2ResOne

用于加载我使用的 URL

$.history.load(btn.attr('action-name'));

其中btn元素具有属性 action-name 'Resource/ResOne'(它在源代码中有 '/' 符号)

那么问题是如何实现那个'/'符号会保留在URL中呢?(当您从收件箱打开一些邮件时,此方法在 gmail 中使用,因此请不要使用在服务器端使用解码技术的技术来回答)

谢谢

4

1 回答 1

2

decodeURIComponent 本身可能无济于事。看看插件,具体来说,让我们看看'locationWrapper'。这是您添加“加载”网址时可能会调用的内容之一。

var locationWrapper = {
    put: function(hash, win) {
        (win || window).location.hash = this.encoder(hash);
    },
    get: function(win) {
        var hash = ((win || window).location.hash).replace(/^#/, '');
        try {
            return $.browser.mozilla ? hash : decodeURIComponent(hash);
        }
        catch (error) {
            return hash;
        }
    },
    encoder: encodeURIComponent
};

注意到编码器部分了吗?您需要以某种方式覆盖它,或者更换编码器。快速浏览一下代码,它看起来并不过分“扩展”友好。因此,根据该代码,您是否将动作名称“解码”一百万次并不重要,它仍然会再次对其进行编码。

编辑:刚刚在wiki上找到了这个:

$.history.init(callback, { unescape: true });

这是一个配置选项。https://github.com/tkyk/jquery-history-plugin/wiki/How-to-use-the-forward-slash-instead-of-ugly-%27%252F%27

无论如何,祝你好运!

于 2011-08-26T06:09:42.950 回答