iOS 9 中屏幕导航的设备位置路径错误

Posted

技术标签:

【中文标题】iOS 9 中屏幕导航的设备位置路径错误【英文标题】:Device location path error for navigation of screen in iOS 9 【发布时间】:2015-10-07 10:45:13 【问题描述】:

在我基于 Cordova 的 ios 应用程序中,当我尝试从主页导航到下一个屏幕时,它仍保留在 iOS 9 的主页中,在 iOS 8.4 及更低版本中导航工作正常。

这是 iOS 8.4 中的路径(工作正常)

file:///var/mobile/Containers/Bundle/Application/EABC-4728-97BF-466B/MyApp.app/www/index-telugu.html#publicinterface

这是 iOS 9.0 中的路径,与假设路径不同

file:///var/mobile/Containers/Bundle/Application/47CF-A77E-97ACED384A/MyApp.app/www/index-telugu.html#main

如果有人遇到类似问题,请建议我解决这个问题的方法

这是我的代码:

    $('#publicinterface_main_id').click(function()
      

         if (!checkConnection())
                   
            navigator.notification.alert('Please Check Your Internet Connection');
        
        else if (!navigator.geolocation) 
        
            navigator.notification.alert('Please switch on location settings on your mobile');
        
        else 
        

            window.location.href = "index-telugu.html#"+$(this).attr('reloadIndex');

            console.log("Path for navigation: : " + window.location.href );

            location.reload();                
            navigator.geolocation.getCurrentPosition(function (p) 
            
                getAddress(p.coords.latitude,p.coords.longitude);
                $('#pub_HgeoLocation').val(p.coords.latitude+","+p.coords.longitude);
            );

         var places = new google.maps.places.Autocomplete(document.getElementById('pub_geoLocation'));
         google.maps.event.addListener(places, 'place_changed', function () 
            
                var place = places.getPlace();
                var address = place.formatted_address;
                var longitude = place.geometry.location.lng();
                var latitude = place.geometry.location.lat();
                $('#pub_HgeoLocation').val(latitude+","+longitude)
            );
        
      );

【问题讨论】:

【参考方案1】:

iOS 9.0 UIWebView(由 Cordova/Phonegap 使用)的一个错误/“功能”是 window.location.hash 的设置是异步的 - 有关详细信息,请参阅 this bug report。请注意,iOS 8+ 上的 Safari 使用 WKWebView 而不是 UIWebView,因此这个问题在 iOS 9.0 上的 Safari 浏览器中并不明显

console.log(window.location.hash); // -> "#bar"
window.location.hash = '#foo';

console.log(window.location.hash); 
// -> "#bar" // iOS 9.0 UIWevView
// -> "#foo" // iOS 9.0 WKWebView (Safari) and all other known browsers except

// in all other known browsers at this point window.location.hash will read '#foo'. In iOS9 UIWebView it won't.
if(window.location.hash !== '#foo') 
  // bang: iOS 9 webview
 else 
  // ok: any other browser

作为一种解决方法,您可以尝试使用window.setTimeout 在设置值window.location.hash 异步后进行操作,允许在使用之前应用该值。因此,使用上面的代码,尝试类似:

window.location.href = "index-telugu.html#"+$(this).attr('reloadIndex');

window.setTimeout(function()
    console.log("Path for navigation: : " + window.location.href );
    location.reload();    
,0);

【讨论】:

谢谢...这对我来说真的很神奇..它与您的解决方案配合得很好..

以上是关于iOS 9 中屏幕导航的设备位置路径错误的主要内容,如果未能解决你的问题,请参考以下文章

导航栏在iOS 9.2中显示错误的导航项

导航栏在 iOS 9.2 中显示错误的导航项

带有.css左/右的Safari iOS 9.0.2 jquery错误

升级到 iOS 11 后弹出错误的位置

求助SQL Server I/O设备错误

Xamarin:无法在 iOS 9.2.1 设备上运行应用程序