javascript - Cordova - window.history.back() 不适用于 iOS 9 中的 HTML 后退按钮

标签 javascript html cordova ios9 cordova-3.8.0

在我的应用程序中,我使用 window.history.back 导航回上一个 View

后退按钮声明

 <div class="back_icon"  id="verification_back_icon"><a href="#" data-rel="back"  data-transition="slidedown"><img src="images/back_btn.png" width="23"/></a></div>

按钮操作:

$( "#verification_back_icon" ).on( "click", function ( e ) {
    if ( checkDirtyVacation() ) {
        e.preventDefault();
        if ( backbtnAlt == false ) {
            backbtnAlt = true;
            confirm( "All data will be lost. Do you want to continue?",
                function ( r ) {
                    if ( r ) {
                        //onBackKeyDown();
                        clearVacationvalues();
                        window.history.back();//this is not working in iOS 9
                    } else {

                    }
                    backbtnAlt = false;
                } );
        }
    }
    else {
        e.preventDefault();
        if ( $( ".vaction_location" ).hasClass( "chkSelect" ) ) {
            $( ".vaction_location" ).removeClass( "chkSelect" );
            $( ".vaction_location" ).addClass( "chkUnSelect" );
        }


        window.history.back();
    }
} );

这在 iOS 8.4 之前一直有效。在 iOS 9 中,此导航不起作用。

我正在使用 Apache Cordova native 平台版本 3.8.0

如果有人遇到类似问题,请建议我。 我试过 history.back doesn't work on iOS using Cordova , 但没有运气

谢谢。

最佳答案

问题是 window.location.hash 的设置在 iOS 9.0 UIWebview(由 Cordova/Phonegap 使用)中是异步的 - 参见 this bug report了解详情。

这会在使用默认使用 window.location.hash 在“页面”之间导航的 jQuery Mobile 时导致问题。它还会导致使用此机制的弹出窗口/对话框/选择菜单出现问题。

您可以通过阻止 jQuery Mobile 自动监听/使用 location.hash 来解决此问题:

$(document).on("deviceready", function(){
    $.mobile.hashListeningEnabled = false;
});

但是,我发现这对 Android 有副作用,例如导致硬件后退按钮不起作用,所以我使用 cordova-plugin-device 将其专门针对 iOS 9 :

$(document).on("deviceready", function(){
    if(device.platform === "iOS" && parseInt(device.version) === 9){
        $.mobile.hashListeningEnabled = false;
    }
});

请注意,我使用的是 navigator.app.backHistory() 而不是 window.history.back()hashListeningEnabled = false - 这可能会有所作为。

或者您可以使用 this plugin在 iOS 8 和 9 上使用新的 WKWebView。WKWebView 由 iOS 8+ 上的 Safari 使用,因此在 iOS 9 上的浏览​​器中查看 JQM 站点不会遇到这些问题。由于 a bug,cordova-ios 3 仍然使用 UIWebView在 iOS 8 的 WKWebView 中,但即将推出的 cordova-ios 4 will support一个WKWebView core plugin适用于 iOS 9+。请注意,由于其更严格的安全性,将 WKWebView 与 Cordova/Phonegap 应用程序一起使用时还有其他注意事项,例如在 XHR 响应中需要 CORS header 。

关于javascript - Cordova - window.history.back() 不适用于 iOS 9 中的 HTML 后退按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32761206/

相关文章:

javascript - Node.js req.params.locationid 没有抓取 ID

javascript - 如何使用 jQuery 使列表元素内的图像可点击?

html - CSS 中一个 div 或表格的两个滚动条

ios - Phonegap应用程序的内容安全策略

javascript - 如何删除 SAPUI5 应用程序中对 'library-preload.json' 的可选调用?

javascript - 如何在没有空函数的情况下在javascript中实现对象组合?

javascript - hackerrank 循环数组旋转由于 Javascript 超时而终止

javascript - preventDefault() 和 stopImmediatePropagation 不工作

javascript - 如何为整个文档启用 keydown 并为一个 div 禁用 keydown

android - '错误: the command "android" failed' using cordova