2015-09-27 33 views
0

我在iOS平臺上使用Phonegap時遇到了一個奇怪的問題。在Android上,「彈出」工作正常。 我有這樣的代碼:我無法在iOS移動版上使用Phonegap打開彈出對話框

<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 謝謝。

回答

4

我假設您正在測試iOS 9,並從您的HTML的外觀,在您的應用程序中使用jQuery Mobile。如果是這樣,你遇到了iOS 9中引入的bug /「功能」,即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這些問題科爾多瓦的應用:

$(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說,在彈出的設置data-history="false" div解決了他們的問題,所以如果上述不起作用,請嘗試這一點。

或者,您可以使用this plugin在您的Cordova應用程序的iOS 8和9上使用新的WKWebView。由於iOS 8中的WKWebView中的a bug,cordova-ios 3仍然使用UIWebView,但iOS 9的即將推出的cordova-ios 4 will support a WKWebView core plugin。請注意,當使用帶有Cordova/Phonegap應用程序的WKWebView時,由於其更嚴格的安全性(例如在XHR響應中需要CORS標頭),還有其他注意事項。

+0

謝謝。是的,我正在使用iOS 9.0。好人。 –

+1

我有一些副作用,全局改變這一點,而不得不求助於每個彈出窗口設置data-history =「false」。這有助於在iOS 9和jQM 1.4.2上爲我解決這個問題。 – Dan

+0

我試過data-history =「false」,它不起作用,當我嘗試上面的解決方案時,它隱藏我的頁面後,我做任何移動頁面更改......... $ .mobile.pageContainer.pagecontainer( 「change」,「#homepage」,{transition:「fade」});和.hide()停止工作.. – John