如果创建的网址不是“真正的”网址,那么使用历史记录API的重点是什么?当然我可以尽可能多地推送State,但是如果我不能将其中一个URL作为书签包含在某处,那么重点是什么?我真正的问题是 - 如何设置Web服务器,以便无论输入的地址如何,它只加载一个Web应用程序(保留地址完整,以便我可以使用JavaScript引用它来加载相关内容)?< / p>
因此,我可以使用History API显示相应的地址,然后当用户稍后返回该网站时,该书签实际上可以正常工作。
答案 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>