我想在不重新加载页面的情况下更改URL.我发现可能的解决方案是
window.history.pushState('page2','Title','/ page2.php');
但有些浏览器如Firefox 3.5,IE6 +不支持这一点,所以对他们来说解决方案是
var uri = window.location.href;
但问题是如何发现浏览器是否支持history.pushstate?
TRY CATCH是可能的解决方案还是其他任何东西.
在修改历史状态时是否可以订阅某些事件?怎么样?
我正在研究一些javascript代码,并使用window.History.pushState加载新HTML页面,而不是使用href标签.我的代码(工作正常)看起来像这样.
window.History.pushState({urlPath:'/page1'},"",'/page1')
Run Code Online (Sandbox Code Playgroud)
奇怪的是,这失败了,即重新加载浏览器
window.History.pushState({urlPath:'/page2.php'},"",'/page2.php')
Run Code Online (Sandbox Code Playgroud)
但是这个工作,内容更新,浏览器没有刷新!(注意URL是绝对的而不是相对的)
window.History.pushState({urlPath:'www.domain.com/page2.php'},"",'www.domain.com/page2.php')
Run Code Online (Sandbox Code Playgroud)
该文档的window.History.pushState说,第三个参数的URL可以是绝对或相对-
URL - 此历史记录条目的URL由此参数指定.请注意,在调用pushState()之后,浏览器不会尝试加载此URL,但稍后可能会尝试加载URL,例如在用户重新启动浏览器之后.新URL不一定是绝对的; 如果是相对的,则相对于当前URL进行解析.新URL必须与当前URL的源相同; 否则,pushState()将抛出异常.此参数是可选的; 如果未指定,则将其设置为文档的当前URL.
绝对URL似乎正在起作用,但相对似乎并非如此.为什么会这样?
如何检查您使用的浏览器是否支持HTML5历史记录API?
正如你在这里看到的http://caniuse.com/#search=history中只有chrome + ff4和其他几个人支持这个,如果他们不支持这个,我希望做点其他事情.
如何为此检查制作某种if语句?
在我不能相信没有人注意到此之前或者我必须要丢失某些类别的情况下提交这个:
看来如果你window.history.pushState在iOS上做一个简单的操作,位置栏就不会更新,除非它是对用户手势的响应.状态本身确实被推动(正如您可以通过按下后退按钮按钮看到的那样).
这是我可以想出的最小的测试用例重新创建问题:
http://thelink.is/history-api-ios-bug
在支持History API的桌面浏览器上,您应该会看到位置栏中的URL每秒更改为/ 0,/ 1等.在iOS上 - 使用iPhone(运行iOS 4.3)和iPad(运行iOS 4.3.3)进行测试 - 位置栏不会更新,但是按下后退按钮会显示正确的先前位置(自测试案例开始就是404)没有后端逻辑来处理这些URL).
思考?解决方法?一个哭泣和拥抱的肩膀?
更新:此问题已在iOS 5中修复.
有人能指出我支持/不支持HTML5 History API的浏览器的兼容性图表吗?
规格:http://www.w3.org/TR/html5/history.html
教程:https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history
我知道之前已经多次询问过,但答案的描述性不足以解决我的问题.我不想更改页面的整个URL.我想&item=brand在按钮点击时追加一个参数而不刷新.
使用document.location.search += '&item=brand';使页面刷新.
使用window.location.hash = "&item=brand";append而不刷新但使用散列#来消除参数的使用/效果.我试图在追加后删除散列,但这不起作用.
这个答案和许多其他人建议使用HTML5 History API,特别是history.pushState方法,对于旧浏览器,是设置片段标识符以防止页面重新加载.但是怎么样?
假设URL是: http://example.com/search.php?lang=en
如何&item=brand使用HTML5 pushState方法或片段标识符进行追加,以便输出如下:http://example.com/search.php?lang=en&item=brand没有页面刷新?
我希望有人可以说明如何使用HTML5 pushState将参数附加到现有/当前URL.或者,如何为相同目的设置片段标识符.一个很好的教程,演示或一段代码与一点点解释将是伟大的.
演示到目前为止我所做的一切.非常感谢您的回答.
为了使IM客户端始终保持登录状态,在将文档插入文档之前,通过使用AJAX加载页面来避免整页加载.
但是,在Facebook AJAX请求期间,浏览器似乎明显加载; 重新加载按钮变为X,浏览器内置的进度指示器指示加载/等待等)
我已经能够成功实现基于AJAX的导航,但我的浏览器没有显示任何加载的指示(因为请求是异步的)Facebook如何做到这一点?
window.location.hashvs HTML5 history.pushState.使用ajax请求满足url哪个更好,为什么?谢谢.
在Safari for OS X Lion中,当您使用滑动手势在历史记录中向前或向后导航时,该窗口会像在物理页面中移动一样进行动画处理.此行为的问题在于许多应用程序已经侦听历史记录状态中的更改,并且在更改哈希值或使用HTML5时进行适当的响应pushState.
一个完美的例子是GitHub,当导航进出文件夹时 - 例如https://github.com/johndyer/mediaelement.如果单击文件夹,然后滑动到上一页,则显示结束状态"快照",然后从开始状态再次动画,这不仅令人困惑,而且使动画的信息值无效.
今天是我使用Lion的第一天,但我很好奇是否有其他网络开发人员遇到过此问题,以及您是否找到了解决方法?