我无法在iOS mobile上打开带有Phonegap的弹出对话框

我无法在iOS mobile上打开带有Phonegap的弹出对话框,ios,cordova,dialog,popup,Ios,Cordova,Dialog,Popup,我在iOS平台上遇到了一个关于Phonegap的奇怪问题。在Android上,弹出窗口可以正常工作。 我有以下代码: <button data-rel="popup" data-position-to="window" data-transition="pop" id="prueba23">Botón</button> <div data-role="popup" id="popupDialog"> <div data-role="header"

我在iOS平台上遇到了一个关于Phonegap的奇怪问题。在Android上,弹出窗口可以正常工作。 我有以下代码:

<button data-rel="popup" data-position-to="window" data-transition="pop" id="prueba23">Botón</button>
<div data-role="popup" id="popupDialog">
    <div data-role="header" data-theme="a" style="top:-21px">
        <h1>Delete Page?</h1>
    </div>
    <div role="main">
        <h3 class="ui-title">Are you sure you want to delete this page?</h3>
        <p>This action cannot be undone.</p>
    </div>
    <div data-role="footer">
        <div data-role="navbar">
            <ul>
                <li><a href="#test-ries" data-role="button" data-icon="info"   data-iconpos="notext">Volver</a></li>
            </ul>
        </div>
    </div>
</div>
<script>
$('#prueba23').on('tap', function(e){
    e.preventDefault();
    $('#popupDialog').popup('open');
});
</script>
在iOS平台上,我第一次点击按钮时,弹出窗口出现,一秒钟后消失。在第二、第三、第四,。。。时间,弹出窗口工作正常。只是我第一次按按钮时有一种奇怪的行为

这里有一个我录制的视频示例:
谢谢。

我假设您正在iOS 9上进行测试,并且从HTML的外观来看,您正在应用程序中使用jQuery Mobile。如果是这样,您会遇到iOS 9中引入的错误/功能,即在Cordova/Phonegap使用的iOS 9.0 UIWebview中,window.location.hash的设置是异步的-有关详细信息,请参阅

使用jQuery Mobile时会出现问题,默认情况下,jQuery Mobile使用window.location.hash在页面之间导航。它还会导致使用此机制的弹出窗口/对话框/选择菜单出现问题,从而导致您看到的症状。请注意,iOS 8和iOS 9上的Safari使用的是WKWebView而不是UIWebView,因此在iOS 9上的浏览器中查看的JQM站点不会遇到这些问题

通过阻止jQuery Mobile自动侦听/使用location.hash,您可以在iOS 9.0 Cordova应用程序上修复这些问题:

$(document).on("deviceready", function(){
    $.mobile.hashListeningEnabled = false;
});
然而,我发现这对Android有副作用,比如导致硬件后退按钮无法工作,因此我专门针对iOS 9使用:

这修复了我的导航和弹出问题,但是在弹出div上设置data history=false修复了它们的问题,所以如果上面的方法不起作用,也可以尝试一下


或者,您也可以使用Cordova应用程序在iOS 8和iOS 9上使用新的WKWebView。cordova ios 3仍然使用UIWebView,因为ios 8中有WKWebView,但即将推出的用于ios 9+的cordova ios 4 a。请注意,在将WKWebView与Cordova/Phonegap应用程序一起使用时,由于其更严格的安全性,还有其他注意事项,例如在XHR响应上需要CORS头。

我假设您正在iOS 9上进行测试,并且从HTML的外观来看,在应用程序中使用jQuery Mobile。如果是这样,您会遇到iOS 9中引入的错误/功能,即在Cordova/Phonegap使用的iOS 9.0 UIWebview中,window.location.hash的设置是异步的-有关详细信息,请参阅

使用jQuery Mobile时会出现问题,默认情况下,jQuery Mobile使用window.location.hash在页面之间导航。它还会导致使用此机制的弹出窗口/对话框/选择菜单出现问题,从而导致您看到的症状。请注意,iOS 8和iOS 9上的Safari使用的是WKWebView而不是UIWebView,因此在iOS 9上的浏览器中查看的JQM站点不会遇到这些问题

通过阻止jQuery Mobile自动侦听/使用location.hash,您可以在iOS 9.0 Cordova应用程序上修复这些问题:

$(document).on("deviceready", function(){
    $.mobile.hashListeningEnabled = false;
});
然而,我发现这对Android有副作用,比如导致硬件后退按钮无法工作,因此我专门针对iOS 9使用:

这修复了我的导航和弹出问题,但是在弹出div上设置data history=false修复了它们的问题,所以如果上面的方法不起作用,也可以尝试一下


或者,您也可以使用Cordova应用程序在iOS 8和iOS 9上使用新的WKWebView。cordova ios 3仍然使用UIWebView,因为ios 8中有WKWebView,但即将推出的用于ios 9+的cordova ios 4 a。请注意,在将WKWebView与Cordova/Phonegap应用程序结合使用时,由于其更严格的安全性,还需要考虑其他因素,例如在XHR响应中需要CORS头。

我在全局范围内更改此设置会产生一些副作用,因此不得不在每个弹出窗口上设置data history=false。这对我在iOS 9上使用jQM 1.4.2解决了这个问题。我尝试了data history=false,但它不起作用。当我尝试上述解决方案时,它会在我进行任何移动页面更改后隐藏我的页面。mobile.pageContainer.pagecontainerchange,主页,{transition:fade};而.hide停止工作..我在全局范围内更改此选项会产生一些副作用,因此不得不在每个弹出窗口上设置data history=false。这对我在iOS 9上使用jQM 1.4.2解决了这个问题。我尝试了data history=false,但它不起作用。当我尝试上述解决方案时,它会在我进行任何移动页面更改后隐藏我的页面。mobile.pageContainer.pagecontainerchange,主页,{transition:fade};而且.隐藏停止工作。。