2011-08-19 295 views
3

如果创建的URL不是“真正的”URL,那么使用History API有什么意义?当然,我可以尽可能多地推送状态,但如果我不能,那么将这些URL之一包含在某个书签中,这有什么意义?我真正的问题是 - 你如何设置一个Web服务器,以便不管输入的地址如何,它只加载一个Web应用程序(保留地址以便我可以使用JavaScript引用它来加载相关内容)?HTML5历史API和书签

因此,我可以使用历史记录API来显示适当的地址,然后让用户在稍后返回到网站时实际工作。

回答

2

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

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

但是,在客户端,您需要JavaScript解析URL,然后进行相应的响应。我个人发现jQuery Address插件非常适合这个。

包含插件像这样,包括绝对路径到你的应用程序的根与state说法:

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

然后你不得不jQuery.address解析URL时,页面加载和DOM准备:

// 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

+0

非常感谢您的详细解答。因此,根据您提供的示例链接,当我备份到http://www.asual.com/jquery/address/samples/时,该示例说明了“Simple PHP/mod_rewrite支持示例HTML5的示例”,那么你会假设他们使用nwellcome的mod_rewrite来引导传入的超链接,然后在应用程序中使用jQuery.address更新地址状态? – RyJ

+0

是的,确切地说。你最好重写(不重定向!)应用程序URL下的所有流量到您的应用程序的确切URL(您在'state'参数中指定的相同地址)。 Apache使用mod_rewrite来实现这一点,但任何体面的Web服务器和Web框架将提供某种URL重写方案。 – Roshambo

1

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

+0

我从你的答案明白的是,而不是简单地将内容添加到ULR中作为“基本URL +”/ somecontent'“,使用类似”基本URL +“?Variable1 = SomeContentA&variable2 = SomeContentB'”。我对么 ? – vivek

1

如果你使用Apache,与mod_rewrite你可以直接您想在服务器上的同一资源然而,许多网址。然后,该资源必须检查URL并以正确的状态动态创建页面,无论服务器端还是客户端完成了。

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