Javascript pagebeforehide事件仅为“启动”;“内部”;页面转换

Javascript pagebeforehide事件仅为“启动”;“内部”;页面转换,javascript,jquery,jquery-mobile,Javascript,Jquery,Jquery Mobile,当我离开页面(页面“#第一”)时,我需要做一些事情。 其实很简单: $(document).on('pagebeforehide', '#first', function(event, ui) {alert('leaving page');}); 当我通过“内部”链接离开页面时没有问题,比如: <a href="#second" data-role="button">Open something</a> <a href="http://www.google.co

当我离开页面(页面“#第一”)时,我需要做一些事情。 其实很简单:

$(document).on('pagebeforehide', '#first', function(event, ui) {alert('leaving page');});
当我通过“内部”链接离开页面时没有问题,比如:

<a href="#second" data-role="button">Open something</a>
<a href="http://www.google.com" rel="external" data-role="button">Open something</a>

这里触发事件并执行处理程序

但当我想打开像这样的外部链接时:

<a href="#second" data-role="button">Open something</a>
<a href="http://www.google.com" rel="external" data-role="button">Open something</a>

此处未激发事件且未执行处理程序

页面内容是简单还是复杂并不重要——我发现这只取决于链接是内部链接还是外部链接

怎么了?

rel=“external”意味着页面将作为外部页面打开,并且所有以前的页面内容(包括其脚本)都将丢失,这也将触发整个页面刷新,因此您的pagebeforehide事件不会触发,因为它将不再存在

jQuery移动页面事件只能在正常页面更改期间发生。基本上,我想说的是,您需要转到另一个jQuery移动页面以触发此事件。在您的情况下,您正在强制应用程序执行完整页面刷新,此时,页面刷新将发生在pagebeforehide事件之前

编辑:

虽然没有任何交叉浏览器解决方案,但您总是可以作弊

  • 不要在按钮中包含href link,而是将链接替换为#,并添加一个id,这样我们就可以识别它,如下所示:

    打开某物

  • 现在,将单击事件添加到此按钮,并在将页面更改为www.google.com之前执行需要执行的操作:

        $(document).on('click', '#change-page', function(){       
            // Do something here then change page
        });
    
  • 或者将您的按钮链接到另一个虚拟内页(仅用于此目的),在其上捕获页面之前隐藏:

    $(document).on('pagebeforehide ', function(){       
        // Again do something here and manualy change the page
    });
    

  • 你能建议一些安全的(意思是:独立于浏览器的)方法来捕获页面之间的转换吗?这一点非常重要,因为Google Chrome不支持DOM
    onunload
    event,mobile Safari(iOS设备)不支持onbeforeunloadevent等。你运气不好,因为没有任何类似的交叉浏览器实现。但这不应该阻止你作弊。我会在我的答案中写下可能的解决方案。点击处理是处理页面转换的明显案例。明显但不包括所有可能的方式-使用浏览器后退/前进按钮和关闭页面进行转换。它是最终版本吗?常识上的陷阱页面转换(!)的跨浏览器实现不存在?让我们从另一个角度来看这一点。如果浏览器开发人员不能接受css3/html5实现,为什么他们会在java脚本问题上达成一致?不要依赖3岁以下的任何技术。