In my application I am using window.history.back to navigate back to previous View
Declaration of back button
<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>
Button action:
$( "#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();
}
} );
This worked perfectly till iOS 8.4. In iOS 9 this navigation is not working.
I am using Apache Cordova native platform version 3.8.0
.
If anyone facing the similar problem please suggest me. I have tried with history.back doesn't work on iOS using Cordova, but no luck
Thank you.
The problem is that setting of window.location.hash
is asynchronous in the iOS 9.0 UIWebview (used by Cordova/Phonegap) - see this bug report for details.
This causes issues when using jQuery Mobile which by default uses window.location.hash
to navigate between "pages". It also causes issues with popups/dialogs/select menus which use this mechanism.
You can fix this by preventing jQuery Mobile from automatically listening/using location.hash:
$(document).on("deviceready", function(){
$.mobile.hashListeningEnabled = false;
});
However, I found this had side effects on Android such as causing the hardware back button not to work, so I targeted it specifically at iOS 9 using cordova-plugin-device:
$(document).on("deviceready", function(){
if(device.platform === "iOS" && parseInt(device.version) === 9){
$.mobile.hashListeningEnabled = false;
}
});
Note that I'm using navigator.app.backHistory()
not window.history.back()
in conjunction with hashListeningEnabled = false
- this may make a difference.
Alternatively you can use this plugin to use the new WKWebView on iOS 8 and 9. WKWebView is used by Safari on iOS 8+, hence JQM sites viewed in the browser on iOS 9 don't encounter these issues. cordova-ios 3 still uses UIWebView due to a bug in WKWebView in iOS 8, but the upcoming cordova-ios 4 will support a WKWebView core plugin for iOS 9+. Note that there are additional considerations when using WKWebView with Cordova/Phonegap apps due to its stricter security, such as requiring CORS headers on XHR responses.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With