Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.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 从iOS浏览器中的前向缓存检索页面时一致激发的事件_Javascript_Ios_Safari - Fatal编程技术网

Javascript 从iOS浏览器中的前向缓存检索页面时一致激发的事件

Javascript 从iOS浏览器中的前向缓存检索页面时一致激发的事件,javascript,ios,safari,Javascript,Ios,Safari,当我在mobile(iOS 10.2.1)Safari或Chrome上使用后退按钮时: window的pageshow事件为。建议如下: 窗口的popstate事件未激发。建议在: 未激发文档的readystatechange事件。建议如下: 为什么我需要这个 我在单击时禁用“提交”按钮,因此表单不能多次提交,但当用户使用浏览器的“返回”按钮返回页面时,由于缓存的原因,“提交”按钮将保持禁用状态 我需要一个在用户离开页面或返回页面时触发的事件,以便我可以重新启用submit按钮。卸载事件从不

当我在mobile(iOS 10.2.1)Safari或Chrome上使用后退按钮时:

  • window的pageshow事件为。建议如下:
  • 窗口的popstate事件未激发。建议在:
  • 未激发文档的readystatechange事件。建议如下:
为什么我需要这个

我在单击时禁用“提交”按钮,因此表单不能多次提交,但当用户使用浏览器的“返回”按钮返回页面时,由于缓存的原因,“提交”按钮将保持禁用状态

我需要一个在用户离开页面或返回页面时触发的事件,以便我可以重新启用submit按钮。卸载事件从不触发,pagehide和pageshow事件仅在第一次触发:

  • 我从A页浏览到B页
  • A的页面隐藏被激发(卸载未被激发)
  • 我使用浏览器的“后退”按钮返回
  • A的pageshow被激发(load、popstate或readystatechange未被激发)
  • 我再次导航到B,这一次A的页面隐藏没有被触发
  • 我再次使用后退按钮返回,A的pageshow也不会被触发
  • 后续的后退/前进触发我找不到任何事件
  • 一种解决方法是在第一个back中刷新页面:

    window.addEventListener('pageshow', function (e) {
        if (e.persisted) {
            window.location.reload();
        }
    }, false);
    

    但这违背了BFCache的全部观点。当使用浏览器的“后退”按钮而不重新加载整个页面时,是否没有可靠的方法来执行某些工作?

    这似乎是Webkit的一个已知错误:
    我接受morgoe的回答,因为他提到的错误没有可靠的事件

    这里有一个解决绝望的办法:
    它通过使用用户代理嗅探来检测iOS浏览器,在第一个背面重新加载页面,从而禁用BF缓存

    window.addEventListener('pageshow', function (e) {
        e.persisted &&
        /iPad|iPhone|iPod/.test(navigator.userAgent) &&
        !window.MSStream &&
        window.location.reload();
    }, false);
    

    你这次运气好吗?我仍在努力让它发挥作用。