phonegap deviceready 事件 - 波纹模拟器

Posted

技术标签:

【中文标题】phonegap deviceready 事件 - 波纹模拟器【英文标题】:phonegap deviceready event - ripple emulator 【发布时间】:2011-03-03 21:56:13 【问题描述】:

大家好 我在波纹铬扩展phonegap模拟器中没有正确触发初始phonegap'deviceready'事件处理程序的一些问题。

<script src="xui-2.0.0.js" type="text/javascript" charset="utf-8"></script> 
<script src="http://code.jquery.com/jquery-1.4.3.min.js"></script>
<!--
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.min.css" />
<script src="http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.min.js"></script>
-->
<script type="text/javascript" charset="utf-8" src="phonegap.0.9.4.js"></script>
<!-- <script type="text/javascript" charset="utf-8" src="main.js"></script> -->
<script>
    function onLoad() 
        //console.log(document);
        /*document.addEventListener('deviceready',function() 
                console.log('PHONEGAP_READY');
            ,false);*/
        console.log('ON_LOAD');
        x$(document).on('deviceready', function() 
                console.log('PHONEGAP_READY');
            , false);
    

</script>

所以问题是 console.log('PHONEGAP_READY') 永远不会运行。我在这里使用 XUI 只是为了尝试官方波纹 phonegap 演示的工作方式(发布在他们的页面上)。既不是那个,也不是 document.addEventListener(),工作......奇怪的是,chrome 控制台输出显示为“PhoneGap :: 触发 deviceready 事件!”所以我假设事件确实正在触发,但事件处理程序本身没有被调用...... 任何线索表示赞赏

谢谢

【问题讨论】:

嗨 Deepblue,你什么时候调用你的 onload 函数?在调用该函数之前,您不会设置处理程序。 为了简洁起见,我从这里的列表中省略了它。我在 对不起,我无法回答 - 只是想补充一下,我遇到了同样的问题,所以我开始了一个没有自己的 Java 或 js 的新 Eclipse 项目,按照 quickstart-HelloWorld 说明这封信和我得到相同的结果,部署到 DROIDX。 Logcat 中没有错误消息,但永远不会调用“deviceready”事件处理程序。也许它与覆盖 document.addEventListener 有关? @Brandon - 是的,在 phonegap.0.9.4.js 中 document.addEventListener 在第 338 行被覆盖......正如你所说,它可能与此有关。请注意,在这种情况下,我在 chrome/ripple 中运行东西,因此不涉及 Eclipse/android 打包... 【参考方案1】:

ripple 如何模拟 phonegap 的运行时有一个怪癖:docs here

ripple 将在文档加载之前注入 phonegap 运行时,如果您在应用中包含 phonegap.js 文件,它将覆盖ripple 模拟环境,这可能会导致问题。

尝试从您的页面中删除 phonegap 源并重新加载以查看是否有帮助。

【讨论】:

yyyyyeeeeesssssssssssssssssssssssssssssssssssssssssssssssss :) 谢谢戈德。顺便说一句,你们做了一个地狱般的工具。谢谢 谢谢,从我的 index.html 文件中删除包含的 cordova-2.7.0.js 并使用此处提到的 URL 示例 (***.com/a/15317390/763010) 对我有用。 Ripple 已移至 Apache!有其他链接吗?【参考方案2】:

我也花了几个小时试图解决这个问题。 将有助于在 Ripple UI 中手动将 Cordova 平台版本设置为 2.0(左窗格 > 平台 > 版本:从 1.0 更改为 2.0)。太傻了,我用这个 URL 打电话给 Ripple

http://localhost?enableripple=cordova-2.7.0-Nexus4 

但我仍然必须手动更改设置才能最终运行。那是因为 Ripple 不知道任何高于 2.0.0 的版本,这使得它只需在 UI 中将平台版本设置为 1.0.0……然后它就使用它。

还有更多详情on my blog。

【讨论】:

这是一个救生员。谢谢!【参考方案3】:

试试http://localhost:8080/index.html?enableripple=cordova-2.0.0,这对我来说可以触发 deviceready 事件

【讨论】:

谢谢!这和@Gord 的回答相结合对我有用! 这对我有用,只是将 de cordova-x.0.0 与已安装的 cordova package.json 中的匹配,例如在我的窗口中 C:\Users\drodsou\AppData\Roaming\ npm\node_modules\phonegap\node_modules\cordova【参考方案4】:

在您的 html 文件中包含 Cordova 脚本,如下所示。

    <script  src="cordova-2.7.0.js"></script>

【讨论】:

【参考方案5】:

仅供参考,将查询字符串中的 cordova-x.x.x 更改为您应用中安装的版本也会导致设备准备好在更新版本的涟漪 http://www.raymondcamden.com/index.cfm/2013/11/5/Ripple-is-Reborn 中触发。

http://localhost:4400/?enableripple=cordova-3.0.0 (Default, not firing)

http://localhost:4400/?enableripple=cordova-3.2.0 (Changed to my version, firing)

【讨论】:

【参考方案6】:

基于上述建议,这里是 Visual Studio 2015 RC cordova 应用程序的完整 index.js(编辑提供的模板):

(function () 
    "use strict";
    function bootstrapAngular() 
    console.log("Bootstrapping AngularJS");
    // This assumes your app is named "app" and is on the body tag: <body ng-app="app">
    // Change the selector from "body" to whatever you need
    var domElement = document.querySelector('body');
    // Change the application name from "app" if needed
    angular.bootstrap(domElement, ['app']);
    
    if (document.URL.indexOf('http://') === -1
        && document.URL.indexOf('https://') === -1) 
        console.log("URL: Running in Cordova/PhoneGap");
        //document.addEventListener("deviceready", bootstrapAngular, false);
        document.addEventListener('deviceready', onDeviceReady.bind(this), false);
     else 
        console.log("URL: Running in browser");
        bootstrapAngular();
    
    function onDeviceReady() 
        // Handle the Cordova pause and resume events
        document.addEventListener( 'pause', onPause.bind( this ), false );
        document.addEventListener( 'resume', onResume.bind( this ), false );
        // TODO: Cordova has been loaded. Perform any initialization that requires Cordova here.
        bootstrapAngular();
    ;
    function onPause() 
        // TODO: This application has been suspended. Save application state here.
    ;
    function onResume() 
        // TODO: This application has been reactivated. Restore application state here.
    ;
 )();

此外,他们并没有在上面真正指出这一点,但你不应该在你的 body 标签中放置任何东西来完成这项工作。功能会为您做到这一点。最后,别忘了在某处应用 ng-controller,你还是要指定。

【讨论】:

以上是关于phonegap deviceready 事件 - 波纹模拟器的主要内容,如果未能解决你的问题,请参考以下文章

jQuery Mobile 打破了 Phonegap deviceready 事件

Xcode 中的 phoneGap 不会触发 Deviceready 事件

基于 1.6.1 的 phonegap 构建应用程序中未触发 deviceready 事件

如果关闭位置服务,Phonegap build "deviceready" 事件永远不会触发

phonegap 离线/在线事件不起作用

在 Adob​​e Phonegap Build 中,Deviceready 未触发