ios - 我无法在 iOS 移动设备上使用 Phonegap 打开弹出对话框

标签 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" 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 平台上,我第一次点击按钮时,弹出窗口出现并在一秒钟后消失。在第二次(和第三次、第四次……)时,弹出窗口正常工作。第一次点击按钮时只有一个奇怪的行为。

这是我录制的示例视频:https://www.youtube.com/watch?v=HTkrUr1vpsM&feature=youtu.be 谢谢。

最佳答案

我假设您正在 iOS 9 上进行测试,并且从您的 HTML 外观来看,您正在您的应用程序中使用 jQuery Mobile。如果是这样,您遇到了 iOS 9 中引入的错误/“功能”,即 window.location.hash 的设置在 iOS 9.0 UIWebview(由 Cordova/Phonegap 使用)中是异步的 -见this bug report了解详情。

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

您可以通过阻止 jQuery Mobile 自动监听/使用 location.hash 来解决 iOS 9.0 Cordova 应用程序上的这些问题:

$(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;
    }
});

这解决了我的导航和弹出问题,但是 others have said在弹出式 div 上设置 data-history="false" 为他们解决了这个问题,所以如果上面的方法不起作用,也试试这个。

或者您可以使用 this plugin将 iOS 8 和 9 上的新 WKWebView 与您的 Cordova 应用程序一起使用。由于 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 。

关于ios - 我无法在 iOS 移动设备上使用 Phonegap 打开弹出对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32807903/

相关文章:

xcode - 链接到为 MacOSX 文件 '/usr/lib/libSystem.B.dylib' 为架构 i386 构建的 dylib

java - 启动相机 Activity Cordova 插件

java - 如何通过 Selenium 关闭对话框?

android - 将 android Activity 定义为带有浅色主题的对话框

ios - 如何捕获状态 - 比 BOOL 更灵活但比 NSString 更独特

ios - 如何在 Swift 中动态处理文本

html - 如何定位溢出 div 边缘(右下角)的图像?

ios - Swift 2 - Xcode 7 - 失败,退出代码 1

ios - Delegate vs Unwind Segue 将数据传递给父场景

linux - 防止 gtk FileChooserDialog 在目录中的所有文件上调用 stat?