历史API和域级网址

时间:2013-05-21 00:27:42

标签: javascript html5 html5-history

我在MyDomain.com上有两页。从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链接

现在,网址显示为MyDomain.com/Foo/Foo/Bar /

我不想要一个Foo Foo Bar。

我目前的解决方法是在网址的前面添加“../../../”,但这不够优雅而且不是万无一失的。另一种选择是使用正则表达式来计算目录级别。

使用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);
}

1 个答案:

答案 0 :(得分:1)

您可能希望确保清除DOM中href元素的基本元素...至少在以下情况下,它适用于我:在共享布局页面(_layout.cshtml)上,重置绝对值DOM中的URL通过在head标记中放置以下内容:

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

当然替换你的端口#并在启动时,将根URL替换为实际的域名。

通过这样做,您正在设置或重置href属性并为所有其他相对URL指定基本URL。

现在这样做会影响后退和前进按钮之间页面中保留的任何用户输入数据吗?我猜它会好的,因为上面只重置了href属性,而DOM中的任何其他信息都应该存在。