`
rensanning
  • 浏览: 3537847 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:37944
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:606402
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:681026
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:88656
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:401185
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69534
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:91391
社区版块
存档分类
最新评论

Cordova 3.x 基础(4) -- deviceready事件

阅读更多
Cordova框架中第一个应该掌握的就是这个deviceready事件。采用Cordova开发的应用在运行的时候,Cordova提供的通过HTML5调用Native功能并不是立即就能使用的,Cordova框架在读入HTML5代码之后,要进行HTML5和Native建立桥接,在未能完成这个桥接的初始的情况下,是不能调用Native功能的。在Cordova框架中,当这个桥接的初始化完成后,会调用他自身特有的事件,即deviceready事件。

所以首先应该在HTML中注册deviceready的事件监听,在它的CallBack函数中再去使用Cordova的功能。
document.addEventListener('deviceready', function () {
  console.log('Device is Ready!');
  // ....your code
}, false);


需要注意的是,deviceready事件是在每回读入HTML的时候都会被调用,而不只是应用启动时调用。

除了deviceready事件以外,Cordova应用在内部读取HTML代码的时候还会调用一些其他的事件。但这些并不是Cordova框架提供的事件,而是嵌入的Webview的浏览器Render引擎提供的。

DOMContentLoaded事件
页面的DOM内容加载完成后即触发,而无需等待其他资源(CSS、JS)的加载。

load事件
在DOMContentLoaded事件之后,其他资源加载完成后触发。

所以,其实调用的顺序是:DOMContentLoaded -> load -> deviceready
deviceready事件一定是在load事件之后,所以load事件的执行速度会影响到deviceready事件的调用。把一些不必要的资源可以在deviceready事件之后调用从而提高执行速度。

document.addEventListener('DOMContentLoaded', function () {
  console.log('DOMContentLoaded OK!');
}, false);

window.addEventListener('load', function () {
  console.log('load OK!');
}, false);

document.addEventListener('deviceready', function () {
  console.log('deviceready OK!');
}, false);



需要注意的是,在Cordova的app中如果js执行失败,前台不会有任何提示(后台会出log),所以很多时候点击都没有任何反应,那说明JS执行出错了,把以下代码加到index.html中,当应用发生JS错误的时候,会调用window的onerror方法从而显示错误信息,从而捕获JavaScript的Error提示用户。
window.onerror = function(msg, url, line) {
   var idx = url.lastIndexOf("/");
   if(idx > -1) {
    url = url.substring(idx+1);
   }
   alert("ERROR in " + url + " (line #" + line + "): " + msg);
   return false;
};


  • 大小: 5.4 KB
  • 大小: 15.6 KB
分享到:
评论
6 楼 WCMYCML 2015-12-09  
                                    
5 楼 Nikns 2015-08-04  
   
4 楼 william_miao 2015-01-06  
楼主,cordova的插件都需要在deviceready的callback函数中实现么?
3 楼 lq83623 2014-12-18  
lq83623 写道
您好,  楼主, deviceready 这个事html5的事件吗?我查了下w3c的html5的说明,没有看到这个事件。我在Cordova.js 里面 看到
    channel.join(function() {
        require('cordova').fireDocumentEvent('deviceready');
    }, channel.deviceReadyChannelsArray);

这个事发布deviceready事件吗?我这里没太理解 native怎么通知javascript已经准备好的。
在 CDVViewController.m#webViewDidFinishLoad 这个里面应该是 表明 html已经加载完成
通过NSNotification,调用了CDVViewController.m#onPageDidLoad但是跟踪后也没看到回调到js,楼主对这块是怎么理解能解释一下么?


楼主 不好意思,我这里看的是ios
2 楼 lq83623 2014-12-18  
您好,  楼主, deviceready 这个事html5的事件吗?我查了下w3c的html5的说明,没有看到这个事件。我在Cordova.js 里面 看到
    channel.join(function() {
        require('cordova').fireDocumentEvent('deviceready');
    }, channel.deviceReadyChannelsArray);

这个事发布deviceready事件吗?我这里没太理解 native怎么通知javascript已经准备好的。
在 CDVViewController.m#webViewDidFinishLoad 这个里面应该是 表明 html已经加载完成
通过NSNotification,调用了CDVViewController.m#onPageDidLoad但是跟踪后也没看到回调到js,楼主对这块是怎么理解能解释一下么?
1 楼 赫克托尔 2014-08-18  
楼主,console.log('deviceready OK!'); 这条log怎么看到的,我找eclipse怎么找不到这条logcat

相关推荐

    Cordova 3.x 实例开发 -- 基于Ionic的Todo应用

    Cordova 3.x是其早期的一个版本,尽管现在已更新到更高版本,但理解基础版本对于学习移动开发历史和工作原理很有帮助。 在这个实例中,我们将探讨如何使用Cordova 3.x和Ionic框架创建一个Todo应用。Ionic是一个基于...

    Cordova 3.x 基础(10) -- UI框架Ionic Framework

    在Cordova 3.x的基础上,开发者可以结合UI框架如Ionic Framework来构建美观且功能丰富的移动应用。 Ionic Framework是一个专为Cordova和AngularJS设计的开源HTML5移动应用框架,旨在提供一套完整的UI组件和工具,...

    Cordova 3.x 入门 - 目录

    比如,如果你想要访问设备的相机功能,可以添加`cordova plugin add cordova-plugin-camera`。每个插件都有相应的API文档供开发者参考。 7. **打包与发布**:完成开发后,可以使用Cordova提供的`cordova build --...

    Cordova 3.x 基础(16) -- slides & books

    在本主题中,我们将深入探讨Cordova 3.x的基础知识,包括其工作原理、安装与配置、插件系统、以及如何创建和发布应用程序。 1. **Cordova简介** Apache Cordova 是Apache软件基金会的一个开源项目,它的核心理念是...

    Cordova 3.x 基础(7) -- Native API的使用

    **Cordova 3.x 基础:Native API的使用** Cordova,作为一个开源的移动应用开发框架,允许开发者使用Web技术(HTML5、CSS3、JavaScript)来构建跨平台的移动应用程序。在Cordova 3.x版本中,开发者可以通过其提供的...

    Cordova 3.x 源码分析(2) -- cordova.js概要

    在Cordova 3.x版本中,这些功能对于开发者理解和构建混合应用至关重要。 1. 初始化过程: 当应用启动时,`cordova.js`首先处理初始化工作。它会监听页面加载事件,当DOM加载完成后,它会触发`deviceready`事件。这...

    cordova-2.9.1.jar

    实实在在经过ant编译的cordova-2.9.1.jar 而不是有些人坑蒙拐骗的rar文件

    Cordova 3.x 基础(12) -- Plugin开发

    在“Cordova 3.x 基础(12) -- Plugin开发”这一主题中,我们主要探讨的是如何为Cordova应用开发自定义的插件。插件是Cordova生态系统的关键组成部分,它们允许开发者扩展Web应用程序的功能,使其能够充分利用设备...

    Cordova 3.x 实用插件(1) -- Google地图Maps

    此外,这个博客可能还涵盖了如何使用Cordova的`deviceready`事件来确保地图在设备准备好后才加载,以及如何处理不同平台间的兼容性问题。例如,可能需要针对iOS和Android调整地图样式或交互。 在实际开发中,开发者...

    Android代码-cordova-plugin-app-update

    cordova-plugin-app-update App updater for Cordova/PhoneGap Demo Try it yourself: Just clone and install this demo. cordova-plugin-app-update-DEMO :tada: 如果喜欢它,请别忘了给我一颗鼓励的星 Support ...

    Cordova 3.x 实用插件(4) -- Android的SEND、VIEW、CALL(WebIntent)

    标题 "Cordova 3.x 实用插件(4) -- Android的SEND、VIEW、CALL(WebIntent)" 涉及的是使用Cordova框架在Android平台上开发混合移动应用时,如何利用WebIntent插件实现与Android原生功能的交互。这篇博客文章详细...

    Cordova 3.x 实用插件(2) -- 二维码Barcode

    cordova plugin add cordova-plugin-barcodeScanner ``` 一旦插件安装成功,你可以在JavaScript中调用其提供的API。例如,以下代码展示了如何启动扫描器并处理扫描结果: ```javascript window.plugins.barcode...

Global site tag (gtag.js) - Google Analytics