`
p_3er
  • 浏览: 55729 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

PhoneGap Plugin与Wind.js结合,实现异步通信

 
阅读更多

最近在做一个的ios的App。项目选择了PhoneGap的移动跨平台框架。数据部分因为是某一小说网站的数据,通过ajax的跨域无法直接获取,所以考虑Hybrid模式,把这一部分放在原生那里去处理,然后通过Plugin来与页面JavaScript通信。到这里问题出来了:在PhoneGap中,Plugin不是异步通信的。在执行通信模块的时候,页面是不能动的,会出现假死的现象,页面的loading也无法动。

查了很久的资源,发现:PhoneGap的javascript脚本与原生(iOS,android,wp等)的API的plugin交互,采用与浏览器webkit中的webview进行通信,而它的底层原理就是iframe的交互,它是以一种特定规范的通信协议来展开,而在传统的web上iframe的使用本身就是最原始的异步加载原理的使用。所以,没有办法异步方式在phonegap的开发中广泛使用。

后来找到了老赵的Wind.js框架。通过简单的代码修改后。终于把问题解决了。下面是相关的内容与解决的方法。

首先介绍一下老赵的Wind.js:

官方链接:http://windjs.org/

开源链接:https://github.com/JeffreyZhao/wind

Wind.js的异步模块文档:http://windjs.org/cn/docs/async/

Wind.js简单的介绍:

Wind.js的前身为Jscex,即JavaScript Computation EXpressions的缩写,它为JavaScript语言提供了一个monadic扩展,能够显著提高一些常见场景下的编程体验(例如异步编程)。Wind.js完全使用JavaScript编写,能够在任意支持JavaScript的执行引擎里使用,包括各浏览器及服务器端JavaScript环境(例如Node.js)。

没有引用Wind.js之前我的代码:

call.js:

var getNovelNames = function(url){
    console.log("与原生交互...");
	cordova.exec(
		function(result){
            		console.log("交互成功...");
			var html = '';
			var novelNames = result;
			for(var i=0; i<novelNames.length; i++){
				html +='<li><a href="#page2" data-transition="slide">'+novelNames[i]+'</a></li>';
			}
			
			$("#daylist").append(html);
           		$.mobile.hidePageLoadingMsg();
		},
		function(error){
            		alert('亲,服务器繁忙,请重新刷新页面...');
        	},
		'CallPlugin',
		'getNovelNames',
		[url]
	);
};

index.js:

document.addEventListener('deviceready',function(){

                $.mobile.loadingMessageTextVisible = false;
                $("#day").bind("click",function(){
                            $.mobile.showPageLoadingMsg();
                            var url = '***'; //这里为某网站的URL暂时屏蔽
                            getNovelNames(url);
          });
 },true);

引入Wind.js

首先在页面引入:

<script type="text/javascript" src="js/wind-all-0.7.3.js"></script>

call.js变为:

var asyncNovelNames = function(url){
        $await(Wind.Async.sleep(1000)); //这里停1s是为了让loading看清楚。App上线后应移除
	cordova.exec(
		function(result){
			var html = '';
			var novelNames = result;
			for(var i=0; i<novelNames.length; i++){
				html +='<li><a href="#page2" data-transition="slide">'+novelNames[i]+'</a></li>';
			}
			
			$("#daylist").append(html);
                        $.mobile.hidePageLoadingMsg();
		},
		function(error){
                        alert('亲,服务器繁忙,请重新刷新页面...');
                },
		'CallPlugin',
		'getNovelNames',
		[url]
	);
};

var getNovelNames =eval(Wind.compile("async", asyncNovelNames));

index.js修改为:

document.addEventListener('deviceready',function(){
                $.mobile.loadingMessageTextVisible = false;
                $("#day").bind("click",function(){
                            $.mobile.showPageLoadingMsg();
                            var url = '***';//这里为某网站的URL暂时屏蔽
                            var task = getNovelNames(url);
                            task.start();
                });
            },true);

修改完成后,发现App还是会有假死的问题,检查发现是原生问题的代码执行的时候,如果时间过长还是会影响页面的显示,这与website的区别很大。之前一直在做JavaEE方面的项目,所以一下直没考虑到这样的问题。后来将数据请求问题的NSURLConnection改成是委托代理的模式。数据通信问题问题解决。



分享到:
评论

相关推荐

    phonegap-1.0.0rc2.zip

    1. **PhoneGap库**:包含PhoneGap的JavaScript库和相关的库文件,这些文件使得JavaScript可以调用设备的功能,如摄像头、地理位置、加速度计等。 2. **平台特定的SDK集成**:PhoneGap支持多个移动操作系统,每个...

    自定义plugin插件实现phonegap与Android交互

    在"自定义plugin插件实现phonegap与Android交互"这个主题中,我们主要关注的是如何通过编写自定义插件来打通JavaScript和Android之间的通信壁垒。在PhoneGap中,Plugin是连接Web层和Native层的桥梁,它们是用Java...

    phoneGAP2.9.1.zip

    PhoneGap,实际上与Cordova是同义词,它是一个开源框架,允许开发者使用HTML、CSS3和JavaScript等Web技术来构建跨平台的移动应用程序。PhoneGap的核心思想是将Web应用包装在原生的移动应用壳中,使得这些Web应用能够...

    Apress.Beginning.PhoneGap.Mobile.Web.Framework.for.JavaScript.and.HTML5.2012

    《Apress.Beginning.PhoneGap.Mobile.Web.Framework.for.JavaScript.and.HTML5.2012》这本书主要探讨了如何利用PhoneGap框架结合JavaScript和HTML5技术来开发跨平台的移动应用程序。PhoneGap是一个开源框架,它允许...

    PhoneGap开发入门借鉴.pdf

    其中,`phonegap.js`是核心JavaScript库,而`phonegap.jar`是Java库,它们都是构建PhoneGap应用所必需的。 在Eclipse中创建新的Android项目后,需要在项目结构中创建特定的目录。`libs`目录用于存放`phonegap.jar`...

    PhoneGap.3.Beginners.Guide.3rd.Edition.1784392286

    Create, develop, debug, and deploy your very own mobile applications with PhoneGap About This Book Build hybrid mobile applications with PhoneGap/Cordova using HTML, CSS and JavaScript Optimize and ...

    Packt.PhoneGap.for.Enterprise.2014

    Packt.PhoneGap.for.Enterprise.2014

    Eclipse+android+jdk+phonegap开发环境教程.pdf

    其次,需要将 PhoneGap 框架的核心文件 phonegap.js 和 phonegap.jar 复制到对应的文件夹下。 然后,需要修改工程的某些文件,包括将 Activity 的父类改为 DroidGap,并将 setContentView() 行改为 super.loadUrl(...

    android_phonegap-0.9.5.1.jar

    PhoneGap的核心在于其桥接机制,它允许JavaScript代码通过WebView组件与Android的原生API进行通信。在“android_phonegap-0.9.5.1.jar”中,这个桥接机制可能还相对原始,但已经足以支持许多基本的设备功能。开发者...

    phonegap3.4.0如何安装.docx

    PhoneGap 是一个流行的开源框架,它允许开发者使用 HTML5、CSS3 和 JavaScript 来构建跨平台的移动应用程序。PhoneGap 3.4.0 版本的安装过程涉及多个步骤,包括在线安装、制作 Jar 文件以及目录整理。以下是详细的...

    PhoneGAP书内实例.zip.002

    PhoneGAP书内实例 文件较大,分2卷压缩,2卷下载完后才可以打开。 如果打不开,请比较文件大小是否正确, 小于我的文件大小请重新下载。

    phonegap-build-maven-plugin-0.0.5.zip

    PhoneGap Build Maven Plugin 和 Stencil Core 都是开源的,这意味着开发者不仅可以免费使用,还可以查看源代码,了解其实现原理,甚至参与项目的改进和扩展。这种开放的环境有助于社区的成长,推动技术的进步,并为...

    cordova扫码插件phonegap-plugin-barcodescanner,修复了在ios10上面的内存泄漏导致的闪退bug

    PhoneGap是Adobe开发的一款跨平台移动应用开发框架,它允许开发者使用HTML5、CSS3和JavaScript来构建原生的移动应用程序。Cordova是PhoneGap的开源版本,它们本质上是同一个项目,只是PhoneGap包含了额外的工具和...

    phonegap-2.9.1中cordova-2.9.1.jar

    最新版本的phonegap-2.9.1是没有cordova-2.9.1.jar的,这里打包好给大家。

    PhoneGAP书内实例.zip.001

    PhoneGAP书内实例 文件较大,分2卷压缩,2卷下载完后才可以打开。 如果打不开,请比较文件大小是否正确, 小于我的文件大小请重新下载。

    phoneGap.js

    phoneGapPhoneGap是一个用基于HTML CSS和JavaScript的 创建移动跨平台移动应用程序的快速开发平台 它使开发者能够利用iPhone Android Palm Symbian WP7 Bada和Blackberry智能手机的核心功能 包括地理定位 加速器 ...

    jQuery+Mobile+和+PhoneGap+集成开发.pdf

    ### jQuery Mobile和PhoneGap集成开发 #### jQuery Mobile介绍 jQuery Mobile是一个针对移动设备优化的HTML5框架,用于构建响应式网站和应用程序。它是jQuery库的一个扩展,利用了jQuery的核心特性,并针对触控屏...

    .PhoneGap.2.x.Mobile.Application.Development

    - **PhoneGap 2.x**:提及了PhoneGap的具体版本,这表明文档针对的是PhoneGap 2.x版本的特性与开发方法。开发者可以了解到该版本特定的API和功能。 - **移动应用开发(Mobile Application Development)**:该书专注...

    PhoneGap 应用开发基础.txt

    PhoneGap 应用开发基础 前端必备技能 助你快速掌握~~~

    Mastering.PhoneGap.Mobile.Application.Development.1783288434

    PhoneGap is a useful and flexible tool that enables you to create complex hybrid applications for mobile platforms. In addition to the core technology, there is a large and vibrant community that ...

Global site tag (gtag.js) - Google Analytics