HTML5历史记录API和书签

时间:2011-08-19 17:42:28

标签: javascript html5

如果创建的网址不是“真正的”网址,那么使用历史记录API的重点是什么?当然我可以尽可能多地推送State,但是如果我不能将其中一个URL作为书签包含在某处,那么重点是什么?我真正的问题是 - 如何设置Web服务器,以便无论输入的地址如何,它只加载一个Web应用程序(保留地址完整,以便我可以使用JavaScript引用它来加载相关内容)?< / p>

因此,我可以使用History API显示相应的地址,然后当用户稍后返回该网站时,该书签实际上可以正常工作。

4 个答案:

答案 0 :(得分:2)

从历史记录API创建的网址没有任何虚假信息。当访问者使用它们加载整个页面时(通过外部超链接或书签或什么不是),您只需要正确处理它们。您可以在客户端或服务器端执行此操作。

处理URL服务器端当然完全取决于您是如何开发应用程序的,并且这个问题有点超出了范围。

但是,在客户端,您可以使用JavaScript解析URL,然后进行相应的响应。我个人认为jQuery Address插件非常适合这个。

包含这样的插件,包括带有state参数的应用程序根目录的绝对路径:

<script type="text/javascript" src="jquery.address-1.3.min.js?state=/absolute/path/to/your/application"></script>

然后,当页面加载并且DOM准备就绪时,您将jQuery.address解析URL:

// Handle the initial load and make the page look the way it's supposed to
$.address.init(function(e) {
    // Address and path details can be found in the event object.
    // Explore it a bit via console.log()
    console.log(e);
});

对于一个好的工作示例,我建议您查看this jQuery.address example以及the jQuery.address docs的来源。

答案 1 :(得分:1)

利用standard organization within URLs。在查询中对您的状态信息进行编码,该信息可由客户端和服务器脚本处理,但始终使用指向Web应用程序的相同基本URL。

答案 2 :(得分:1)

如果您使用的是Apache mod_rewrite,则可以将您想要的多个URL指向服务器上的相同资源。然后,该资源必须检查URL并以正确的状态动态创建页面,无论是服务器端还是客户端都由您决定。

答案 3 :(得分:0)

如果您没有使用MVC框架,可以使用.htaccess来处理@nwellcome提及的问题:

# html5 pushstate (history) support:
<ifModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !index
    RewriteRule (.*) index.html [L]
</ifModule>

来源:HTML5 History / pushState URLs, .htaccess and You