Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 转到其他url而不重新加载页面_Javascript_Jquery_Html_Node.js_Socket.io - Fatal编程技术网

Javascript 转到其他url而不重新加载页面

Javascript 转到其他url而不重新加载页面,javascript,jquery,html,node.js,socket.io,Javascript,Jquery,Html,Node.js,Socket.io,如果我转到域的子路径,通常的方法是执行。这将完全重新加载页面 但是在Facebook上,当你打开一张照片时,地址栏上的url会改变,但是整个页面不会重新加载,它只加载照片平台。这样人们就可以共享照片的url。我想知道这是怎么做到的 我做了一些搜索,一些人建议使用history.pushState,然而,这只适用于大多数现代浏览器。Facebook上的版本也适用于IE 7,我想知道他们是怎么做到的?正如你所说的,历史。pushState仅在上可用 对于较旧的浏览器,以任何方式更改URL的唯一方法(

如果我转到域的子路径,通常的方法是执行
。这将完全重新加载页面

但是在Facebook上,当你打开一张照片时,地址栏上的url会改变,但是整个页面不会重新加载,它只加载照片平台。这样人们就可以共享照片的url。我想知道这是怎么做到的


我做了一些搜索,一些人建议使用
history.pushState
,然而,这只适用于大多数现代浏览器。Facebook上的版本也适用于IE 7,我想知道他们是怎么做到的?

正如你所说的,
历史。pushState
仅在上可用

对于较旧的浏览器,以任何方式更改URL的唯一方法(据我所知)是使用URL中的哈希功能来保留页面信息。然后,您将得到一个类似于
index.php#的URL!page=x&foo=bar
,其中散列将用于表示当前页面。然后,URL将通过一个链接(如
index.php?page=x&foo=bar
)一对一地映射,在刷新页面时,JavaScript可以读回哈希并适当地显示页面。这绝不是一个很好的解决方案,尤其是浏览器不能正确地存储您的历史记录,但它仍然非常流行

如果您希望使用Ajax来重新加载页面并同时更改URL,那么您可以查看诸如/之类的库,这些库将尝试在可用的地方使用
pushState
,但在必须使用hashbang的地方会退回到使用hashbang


你似乎认为facebook支持传统IE的Ajax。我没有意识到这一点,因为我不能说IE7经常是我的go-to浏览器,但IIRC Twitter对于较旧的、功能较少的浏览器的时间要少得多,并且使用了非常简化的界面(我认为它甚至使用了基本的移动视图)。如果是我的网站,我可能会采取类似的立场,在可用的地方使用
pushState
,在不可用的地方只提供独立页面。在这些领域进行向后兼容性的工作有相当艰巨的趋势(尽管上述插件将减轻相当大的负担),除非你需要提供支持,否则可能不值得这么做?

我不知道facebook是如何做到的,但如果你看一下本书的“路由”一章,你会发现这一点

对于尚不支持历史API的浏览器,路由器将处理到URL片段版本的优雅回退和透明转换

如果你进一步看,源代码会说:

// Backbone.History
// ----------------
// Handles cross-browser history management, based on either
// [pushState](http://diveintohtml5.info/history.html) and real URLs, or
// [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange)
// and URL fragments. If the browser supports neither (old IE, natch),
// falls back to polling.
这是提到的文章。 这可能就是我们要走的路