1

MyDomain.com に 2 つのページがあります。MyDomain.com/ および MyDomain.com/Foo/Bar から表示されるインデックス ビュー。各ビューには他のビューへの ajax 呼び出しがあり、それぞれが HTML5 History API を使用して状態をプッシュします。

問題を作成する手順があります。

  • MyDomain.com/ から開始します (期待どおりに動作します)。
  • MyDomain.com/Foo/Bar/ への ajax リンクをクリックします (期待どおりに動作します)。
  • MyDomain.com/ への ajax リンクをクリックします (期待どおりに動作します)。
  • MyDomain.com/Foo/Bar/ への ajax リンクをクリックします。

URL は MyDomain.com/ Foo/Foo /Bar/のように表示されます。

Foo Foo Bar は要りません。

私の現在の回避策は、URL の先頭に「../../../」を追加することですが、これは洗練されておらず、絶対確実ではありません。もう 1 つのオプションは、ディレクトリ レベルをカウントするための正規表現です。

History API で絶対 URL を取得するより良い方法はありますか?

function push(updateElementID, controller, action, url)
{
    if (typeof url == "undefined")
    {
        url = "/" + controller + "/" + action;
    }
    var state = {
        id: updateElementID,
        controller: controller,
        action: action
    }

    history.pushState(state, null, url);
}
4

1 に答える 1

1

DOM の href 要素の base 要素がクリアされていることを確認することをお勧めします...少なくとも次の場合、それは機能します: 共有レイアウト ページ (_layout.cshtml) で、 head タグ内に以下を配置することによる DOM:

<base id="htmldom" href="http://localhost:59805/"/>

もちろん、ポート番号を置き換えて起動し、ルート URL を実際のドメイン名に置き換えます。

これにより、href プロパティを設定またはリセットし、他のすべての相対 URL のベース URL を指定します。

このようにすると、戻るボタンと進むボタンの間のページに保存されているユーザー入力データに影響しますか? 上記は href プロパティのみをリセットし、DOM 内の他の情報はそこにあるはずなので、それで問題ないと思います。

于 2013-07-10T10:05:18.520 に答える