Phonegap Build API调用未触发

时间:2014-03-21 11:19:12

标签: android jquery jquery-mobile cordova phonegap-build

我正在使用jQuery Mobile和Phonegap Build制作应用程序。 jQuery Mobile javascript代码工作正常,但是phonegap javascript代码似乎不起作用。它使用多个html模板的应用程序,我登录了应用程序的索引文件。

我正在使用phonegap 3.1.0版(构建服务的当前默认值)

我在config.xml文件中添加以下行:

<gap:plugin name="org.apache.cordova.device" />
<gap:plugin name="org.apache.cordova.file" />

然后,在index.html,我在标题处添加以下脚本:

<script src="phonegap.js"></script>
<script src="js/settings_page.js"></script>
<script src="js/jquery-2.0.3.min.js"></script>
<script src="js/jquery-mobile-events.js"></script>
<script src="js/jquery.mobile-1.4.1.min.js"></script>

settings_page文件包含一些基本的phonegap API交互,如果未设置,会在本地存储中写入一些默认值:

console.log('added');

document.addEventListener('deviceready', deviceReady, false);

function deviceReady() {

   console.log('called');

   var application_settings = window.localStorage;

   //if no settings have been created, create them
   if (application_settings('defaults') === null) {
       application_settings.setItem('defaults', 'true');
       application_settings.setItem('type', 'all');
       application_settings.setItem('sport', 'all');
       application_settings.setItem('customer', 'all');
       application_settings.setItem('order', 'date');
       application_settings.setItem('refresh', 'never');
       console.log('defaults set');
   }

}

使用ripple模拟器我可以在控制台日志中看到“添加”注释,但是从未到达“被调用”注释,如果我运行应用程序并使用weinre进行调试,则没有任何控制台日志注册。

在这两种情况下都没有生成任何密钥,但我也没有收到任何错误,我错过了什么?我按照此处PhoneGap 3.1 Build Device Is Not Defined和此处http://www.raymondcamden.com/index.cfm/2013/10/1/PhoneGap-Build-and-PhoneGap-30的建议将功能更改为插件,但仍然无效,任何帮助都非常感谢

3 个答案:

答案 0 :(得分:1)

您需要在实际设备或模拟器上运行。在ripple chrome扩展上运行不会帮助你。

答案 1 :(得分:1)

添加以下行帮助我...我已经完成了所有尝试,但没有任何帮助,所以最后我经历了http://docs.build.phonegap.com/en_US/#googtrans(en)配置块..

<plugin name="cordova-plugin-whitelist" version="1"/>
<allow-intent href="http://*/*"/>
<allow-intent href="https://*/*"/>
<allow-intent href="tel:*"/>
<allow-intent href="sms:*"/>
<allow-intent href="mailto:*"/>
<allow-intent href="geo:*"/>
<platform name="android">
    <allow-intent href="market:*"/>
</platform>
<platform name="ios">
    <allow-intent href="itms:*"/>
    <allow-intent href="itms-apps:*"/>
</platform>

答案 2 :(得分:0)

好好经过几个小时的调试和测试后我解决了这个问题,我认为这可以帮助将来引用任何其他的phonegap构建用户,所以我将逐步列出我在这里所做的事情。我不知道这是不是最好的方法,所以我真的很感激可以改进的一些反馈:)

要使jQuery与Phonegap Build和Phonegap API一起使用,您需要在应用程序的索引中执行以下操作:

  • 请注意,API调用不会在模拟器中运行,您需要一个真实的设备来检查它。 (感谢@Dato'Mohammad Nurdin提供这些有价值的信息)
  • 添加对phonegap脚本<script src="phonegap.js"></script>的引用,理想情况下,这可能是您的第一个脚本引用,它不需要任何库工作,您不需要拥有库本身,phonegap build将添加它一旦它编译代码。
  • 添加jQuery引用(如果你需要它,因为我正在使用jQuery Mobile,我需要它)
  • 当您下次添加事件侦听器时,设备就绪将在您的索引文件中发生,在其他脚本中添加此设置将导致设备就绪事件出现一些问题。但是,如果您需要在其他脚本中检查设备就绪状态,则可以为下面的所有脚本添加可用的全局变量,如果您不知道如何使用变量创建脚本,这将使其可用于在此之后引用的所有脚本。示例:<script>var phonegap_ready = false</script>
  • 使用您的事件监听器添加脚本

    document.addEventListener("deviceready", onDeviceReady, false);
    
    function onDeviceReady() {
        phonegap_ready = true;
    }
    
  • 添加jQuery Mobile的源代码以及您的js事件和代码文件。

作为旁注,在使用jQuery Mobile时检查设备是否准备好它只是一个标准,经过一些测试我运行后,phonegap设备准备好比jQuery pageshow事件更快地启动(考虑到所有DOM操作jqm都是有意义的)页面事件确实如此)但我仍然建议谨慎。

在您的代码中,您可以使用deffered call $.when()异步检查,以便在phonegap框架完全正常运行之前不执行phonegap调用。作为使用先前创建的全局变量的示例:

$(document).on('pageshow', '#login_page', function (parent_event) {
    //do jQuery Mobile event handlings here
    $.when(phonegap_ready === true).then(function () {            
        phonegapApiFunctionsCall();
    });
});

如果功能或插件(调用phonegap API作为Phonegap Build 3.0之前的功能,以及Phonegap Build 3.0中的功能已被替换为插件),您将能够从phonegapApiFunctionsCall()运行API命令,将避免phonegap deviceready事件和jQuery Mobile页面初始化事件之间的初始化问题。