【问题标题】:Phonegap Cordova does not fire JQM pageinitPhonegap Cordova 不会触发 JQM pageinit
【发布时间】:2013-07-17 08:41:55
【问题描述】:

我对这个话题做了很多研究,但我没有找到合适的答案。 我的问题是,当我将 Cordova/Phonegap 与 JQM 一起使用时,$(document).ready 会被触发,而不是推荐与 JQM 一起使用的$(document).on('pageinit')。

<script type="text/javascript" src="cordova-2.7.0.js"></script>
<script src="js/jquery-1.10.1.min.js" type="text/javascript"></script>
<script>    
    var deviceReadyDeferred = $.Deferred();
    var jqmReadyDeferred = $.Deferred();
    document.addEventListener("deviceReady", deviceReady, false);
    function deviceReady() {
        deviceReadyDeferred.resolve();
}
$(document).on("mobileinit", function () {
    jqmReadyDeferred.resolve();
});
$.when(deviceReadyDeferred, jqmReadyDeferred).then(doWhenBothFrameworksLoaded);
function doWhenBothFrameworksLoaded() {
    console.log('device ready');    
    $(document).on("pageinit",function(){   
        console.log("document pageinit fired");
    }
}
</script> 
<script src="js/jquery.mobile-1.3.1.min.js" type="text/javascript"></script>
<script src="js/buttonset.js" type="text/javascript"></script>

此页面托管在远程服务器上。在这种情况下,设备就绪会出现在控制台中,但不会触发文档 pageinit。如果我用$(document).ready(function(){ 替换$(document).on("pageinit",function(){,两个日志都会出现,但我不喜欢这个解决方案。

你能告诉我哪里错了吗?

先谢谢了。

【问题讨论】:

    标签: jquery-mobile cordova page-init


    【解决方案1】:
    try this sequence of code in script tag.
    
    /* Initialization of PhoneGap and jQM */
    
    var deviceReadyDeferred = $.Deferred();
    var jqmReadyDeferred = $.Deferred();
    
    
    //initialize PhoneGap
    document.addEventListener("deviceReady", deviceReady, false);
    function deviceReady() {
    
    }
    
    //initialize jQM
    $(document).on("mobileinit", function () {
      //hack to fix android page transition flicking issue
      if (navigator.userAgent.indexOf("Android") != -1){
          $.extend(  $.mobile , {
              defaultPageTransition: 'none'
          });   
        } 
    
      setCustomThemeAndOptions();
    
      jqmReadyDeferred.resolve();
    });
    
    
    //When both PhoneGap and jQM are ready, initialize language setting
    $.when(deviceReadyDeferred, jqmReadyDeferred).then(function(){  
      deviceDeferred = true;
    }); 
    

    【讨论】:

    • 由于data-role=page,我忘了解释我使用多页范例。然后,您的代码会直接显示所有页面。我在这个线程stackoverflow.com/questions/17693035/… 中发现我可以将 $(document).on('pageinit') 放在
      之后。这实际上可行,但某些页面共有的功能仍未定义(例如,使用 turnPage 和 turnPageBack 功能在页面之间滑动)。
    • 是否打算删除 deviceReadyDeferred.resolve();在 deviceReady 函数中?我也尝试使用 .delegate 方法而不是 .on 没有成功
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签