所以底线是 iOS 围绕历史 API 添加了自己的安全性,这意味着您不能使用脚本来更改 url。根据 Aral 的示例,只有用户操作才能允许历史 API 更改 url - 即点击。
解决方法是在 url 上使用哈希(又名片段标识符)。
而不是history.pushState我们将只更改位置:
var i = 0;
var locationUpdateInterval = setInterval(function(){
window.location.hash = i;
i++;
}, 1000);
要在 iOS 应用程序中的某个位置发生更改或它们具有指向您应用程序中特定页面/面板的永久链接时捕获事件:
// named function on purpose for later
function hashchange() {
var pageId = location.hash.substr(1); // drop the # symbol
// do something with pageId
}
window.onhashchange = hashchange;
// onload - if there's a hash on the url, try to do something with it
if (location.hash) hashchange();
我们不能在 iOS 上使用pushState/是很糟糕的popState,但它的安全性与除非用户启动操作,否则无法触发全屏视频相同,这与在 iOS 上下载视频或音频内容相同 - 你可以' t 编写脚本,用户必须启动它(不知何故)。
就像关于 Android 的注释一样 - 问题非常相似,所以这(应该)也可以作为 Android 的解决方法。
如果你想要桌面支持,大多数浏览器都支持onhashchange,但是,是的,你猜到了,IE 落后了——所以你可以用 polyfill 那个坏男孩(虽然需要 jQuery ......):http ://benalman.com/projects/jquery- hashchange插件/
希望有帮助。