2

Webアプリで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」を見てみましょう。これは、URLを「ロード」するときに呼び出される可能性が高いものの1つです。

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
};

エンコーダー部分に気づきましたか?どういうわけかそれをオーバーライドするか、エンコーダーを交換する必要があります。コードを一目見ただけでは、過度に「拡張」しやすいようには見えません。したがって、そのコードによれば、アクション名を100万回「デコード」してもかまいませんが、それでも再度エンコードされます。

編集:ウィキでこれを見つけました:

$.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 に答える