【phonegap】使用的java与js互相调用的原理

Matlab实战:3种雷达间歇采样干扰的仿真与识别(附完整代码) 本文通过Matlab实战,详细仿真了雷达有源间歇采样干扰的三种核心样式:直接转发、重复转发和循环转发干扰。文章提供了完整的代码实现,并深入探讨了基于时频分析和循环平稳分析的特征提取与识别方法,为雷达抗干扰技术的学习与实践提供了清晰的工程实现路径。 阅读详情

http://blog.sina.com.cn/s/blog_6e4d9a9b0101ny26.html

Phonegap使用的java与js互相调用的原理。phonegap实现的模型刚也说了,有同步和异步两种。js实现的api,所以是js先会调用java代码,然后再返回给js。对于同步的而言,就是js调用java,然后java返回一个结果作为返回值。对于异步的而言,可能js掉了很多java代码,但是立即返回,然后java代码执行结束后再回调js代码,这里就涉及到js调java,然后java再调用js。

对于js调用java:

js调用java的入口是通过在js中调用prompt方法,这很奇怪吧,这个方法本来是让浏览器弹出个输入框的。我当初找了好久也没发现phonegap到底怎么搞得的让js调用java的代码,后来看到一会觉得该是这个方法,但是这是一个浏览器的客户端自己的东西,而且怪异的是浏览器并没有弹出输入框,后来终于发现。

在DroidGap.java中有个hack,重载了WebviewClient的onJsPrompt方法,然后执行了自己的逻辑。也就是js调用prompt的时候,java端浏览器代码接受到这个,然后在响应的处理函数中根据传过来的参数,实现了一些特别的逻辑。可以从这个方法的注释上看出一二。

private LinkedList javascript;

服务器保存要回调的js的代码,供js客户端取回,这里java端是服务器端,js端是客户端,服务器端不可能请求客户端做啥,是b/s模型,所以phonegap实现了两种服务模型,一种是轮询,一种是XHR异步回调,也就是Ajax的模型。src/com/phonegap/CallbackServer.java是回调服务器的代码所在处。从类的注释中可以看到。

This class provides a way for Java to run JavaScript in the web page that has loaded PhoneGap.
The CallbackServer class implements an XHR server and a polling server with a list of JavaScript statements
that are to be executed on the web page.
 

CallbackServer提供的这两种模型,一种是XHR,一种是轮询,轮询很简单了,callbackserver服务器端,有一个保存回调js的列表,前面所说,然后每隔一段时间客户端的js会询问一次服务器,是否有需要回调的js,如果有则调用,然后每隔一段时再查询一次服务器。而基于XHR的,其实这个就是ajax用的机制了,js发起一个异步请求,然后服务器会在返回数据之前保持住这个连接,当返回数据就位后,服务器给请求客户端返回数据,然后关闭连接。然后客户端接受并且处理。

刚说了服务器端的代码实现,现在来看一下客户端js的相关代码。

PhoneGap.JSCallback = function() {
...
xmlhttp.open("GET", "http://127.0.0.1:"+PhoneGap.JSCallbackPort+"/"+PhoneGap.JSCallbackToken , true);
xmlhttp.send();
}

这个是XHR模型的代码,客户端js使用xhr请求服务器来获取js代码,进行回调。

PhoneGap.JSCallbackPolling = function() {
...
    var msg = prompt("", "gap_poll:");
    if (msg) {
        setTimeout(function() {
            try {
                var t = eval_r(""+msg);
            }
            catch (e) {
                console.log("JSCallbackPolling: Message from Server: " + msg);
                console.log("JSCallbackPolling Error: "+e);
            }
        }, 1);
        setTimeout(PhoneGap.JSCallbackPolling, 1);
    }
    else {
        setTimeout(PhoneGap.JSCallbackPolling, PhoneGap.JSCallbackPollingPeriod);
    }
}

这个是轮询方式的,可以看到客户端每隔PhoneGap.JSCallbackPollingPeriod段时间,就请求一次服务器(通过prompt("","gap_poll:");)。

******************************************************************************************************************

iOS:

通过让本地代码拦截JavaScript中调用的 window.location=”gap://Class.method/args”命令,来实现从JavaScript到本地代码之间的通信。在本地 代码拦截该命令后,解析获取的参数,然后调用对应的类、方法并传递参数。对应的,使用 UIWebView.stringByEvaluatingJavaScriptFromString来实现本地代码调用JavaScript。


Android:

通 过拦截JavaScript的prompt命令实现从JavaScript到本地代码的通信。JavaScript prompt命令默认会弹出对话框,而PhoneGap的Android本地代码会拦截该对话框,并进一步取得JavaScript数据。相应 的,Android上的PhoneGap内部,使用Java实现了一个HTTP服务器,通过持久性的XHR连接,JavaScript可以不断轮询内部 XHR服务器存储的信息,从而实现了从Java到JavaScript方向的通信。


BlackBerry 4.x:

JavaScript 与本地代码之间的唯一通信方式是通过document.cookie实现的。JavaScript设定Cookie,本地代码从Cookie中获取信息。 对应的,本地代码也可以设定Cookie,允许JavaScript从Cookie中获取本地代码信息。


BlackBerry WebWorks:

新 的BlackBerry WebWorks SDK更好地支持了Java与JavaScript之间的交互通信。通过ScriptEngine.addExtension,Java对象可以被暴露给 JavaScript,而对应的Java可以使用ScriptEngine.executeScript来调用JavaScript。


Windows Phone 7:

在Windows Phone 7中,JavaScript通过window.external.Notify可以将信息发送给本地代码。而相应的,WebBrowser.InvokeScript允许本地代码调用JavaScript。


STM32H743+YT8512C以太网通信实战:CubeMX与LWIP配置详解 本文详细解析了基于STM32H743微控制器与YT8512C PHY芯片的以太网通信实战方案。通过CubeMX工具进行RMII接口、MPU、时钟树等关键硬件配置,并重点阐述了如何修改LWIP协议栈驱动代码以适配YT8512C芯片,解决了LAN8742驱动不兼容的问题。文章提供了从工程创建、代码适配到调试验证的完整步骤,帮助开发者快速实现稳定可靠的嵌入式网络连接。 阅读详情

相关推荐

【SystemVerilog笔记(一)】数据类型

(一)内建数据类型 1.按照四值逻辑和二值逻辑分类 四值逻辑类型:integer、logic、reg、wire等线网类型 二值逻辑类型:byte、shortint、int、longint、bit 2.按照有符号和无符号分类 有符号类型:byte、shortint、int、longint、integer 无符号类型:bit、logic、reg、wire等线网类型 ※记忆:按位定义的变量是无符号的。 (二)软件常用类型 1.定宽数组 在这里插入代码片 ...

cc__cc__的博客 1万+

React Native | Java和JavaScript互操作

这个调用链都是在js线程完成的,也就是会阻塞js线程,如果不想阻塞js线程,可以采用异步的方式,promise或者async/await,异步的方式会将模块与函数的信息存到queue,flush到cpp层(global.nativeFlushQueueImmediate),flush间隔不能小于5ms。通过codegen会自动生成cpp与java的turbo接口代码,java侧的TurboModule的接口签名信息与函数地址会被存储在cpp层的TurboModule#methodMap_中.

分享经验与经历 1061

Pytorch的一小步,昇腾芯片的一大步

相信在AI圈的人多多少少都看到了最近的信息:PyTorch最新2.1版本宣布支持华为昇腾芯片!

机器学习-深度学习-图像处理-opencv-段子 5242

Android native和h5混合开发几种常见的hybrid通信方式

三种解决方法本质都是通过重载webview的一些策略来和native api通讯。 前言 在看这篇文章之前你要确保你有那么一点点的js知识,没错只需要一点点,能看懂最简单的代码就可以。如果你之前没接触过js的话。。也没关系,我会把其中对应的逻辑用语言表达出来。 为什么需要用到js呢,因为前端体系中,像我们说的点击按钮这样的逻辑都是放在js脚本中执行的,有点像我们Android

Felix的专栏 3342

【实战指南】OpenClaw Telegram 群聊不响应完整解决方案:从获取群 ID 到关闭隐私模式全流程

将整个从“获取群组 ID → 配置 OpenClaw Telegram 通道 → 关闭隐私模式 → 测试”的全流程都整合进去。

hampeter的博客 3490

数字孪生在智慧医疗中的5个创新应用:从手术模拟到个性化治疗

数字孪生技术通过创建患者或医疗流程的动态虚拟映射,正在深刻变革智慧医疗。本文重点剖析了其在个性化治疗、手术模拟与导航、药物研发、医院管理优化及慢性病管理五大核心场景的创新应用,展现了如何利用智能映射与数据融合,为精准医疗和高效决策提供强大支持。

weixin_29189003的博客 443

JS调用咱们Java

例:/** * JS调用咱们Java * Java调用JS *  通过手机APP一个网页里面的一个按钮,打开咱们相机摄像头 *  通过手机APP一个网页里面的一个按钮,点击,跳转到打电话页面 */        /**         * JS调用JAVA,需要我们android定义一个方法,提供给JS调用         * 使用webView对象,调用addJavascriptInterfac...

jun_tong的博客 4417

STM32H750VB与AD5292通讯,写入阻值后,AD5292 的阻值没有变化,如何解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1100

在java中使用javascript脚本

介绍在java中使用脚本引擎嵌入javascript代码运行,总结了相关api的调用,通过示例代码让知识点通俗易懂

dream_xin2013的专栏 6630

Cartographer实现双雷达建图

TRAJECTORY_BUILDER_2D.num_accumulated_range_data = 2 --执行一次前端匹配需要的激光扫描分段数量。关于num_subdivisions_per_laser_scan。num_laser_scans =2,--订阅激光扫描话题数量。Frame改为 前雷达laser_1 后雷达laser_2。雷达的话题由scan改为,前scan_1 后scan_2。有些人说需要改成2,但我这里改成2反而不行,1才可以。

Studying…… 1261

16、SQL Server索引的创建与评估

本文详细介绍了SQL Server中索引的创建与评估方法,涵盖索引的基本概念、类型(聚集与非聚集)、唯一性设置以及如何判断索引的好坏。通过实际操作步骤、维护策略和常见问题解决方案,帮助数据库开发者合理设计索引,提升查询性能并控制维护开销。同时提供了索引创建与维护的决策流程图,便于理解和应用。

water的专栏 126

JAVA调用JS实现

后端JAVA开发有些代码逻辑其实在JS中很好实现,因为JS的对象定义不是很严格,避免了繁琐的POJO对象创建,JAVA标准库也提供了JS的调用引擎,方便我们直接复用JS的逻辑实现 注意定义JS方法接口中的方法名要与JS中的大小写完全一致,JS中的alert、console无法调用,但可以从异常捕获中获取调用异常的具体信息 代码参考: import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script

bldstc2011的博客 993

PID、模糊PID、SkyHook、LQR、H2/H∞、ADRC等悬架控制合集

PID、模糊PID、SkyHook、LQR、H2/H∞等悬架控制合集

Mr.邹的博客 2013

phonegap java调用js_phonegap使用的java与js互相调用的原理

phonegap使用的java与js互相调用的原理。phonegap实现的模型刚也说了,有同步和异步两种。js实现的api,所以是js先会调用java代码,然后再返回给js。对于同步的而言,就是js调用java,然后java返回一个结果作为返回值。对于异步的而言,可能js掉了很多java代码,但是立即返回,然后java代码执行结束后再回调js代码,这里就涉及到js调java,然后java再调用js...

weixin_39862871的博客 173

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

phonegap java js_phonegap使用的java与js互相调用的原理

phonegap使用的java与js互相调用的原理。phonegap实现的模型刚也说了,有同步和异步两种。js实现的api,所以是js先会调用java代码,然后再返回给js。对于同步的而言,就是js调用java,然后java返回一个结果作为返回值。对于异步的而言,可能js掉了很多java代码,但是立即返回,然后java代码执行结束后再回调js代码,这里就涉及到js调java,然后java再调用js...

weixin_31964135的博客 143

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

phonegap java js_【phonegap】使用的java与js互相调用的原理

http://blog.sina.com.cn/s/blog_6e4d9a9b0101ny26.htmlPhonegap使用的java与js互相调用的原理。phonegap实现的模型刚也说了,有同步和异步两种。js实现的api,所以是js先会调用java代码,然后再返回给js。对于同步的而言,就是js调用java,然后java返回一个结果作为返回值。对于异步的而言,可能js掉了很多java代码,但...

weixin_42356811的博客 135

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

phonegap使用的java与js互相调用的原理

phonegap使用的java与js互相调用的原理。phonegap实现的模型刚也说了,有同步和异步两种。js实现的api,所以是js先会调用java代码,然后再返回给js。对于同步的而言,就是js调用java,然后java返回一个结果作为返回值。对于异步的而言,可能js掉了很多java代码,但是立即返回,然后java代码执行结束后再回调js代码,这里就涉及到js调java,然后java再调用j...

iteye_7202的博客 209

phonegap java 调用 js_跨平台PhoneGap技术架构五:PhoneGap类间调用关系及Js和Java交互原理...

前面几篇文章主要讲解了PhoneGap几个重要的类,如果看到这里,相信大家对PhoneGap也有了一定的了解。PhoneGap类间调用关系在讲解PhoneGap的交互原理之前,我们把原来的内容串讲一下,以加深理解。请看下面的类间调用关系图:在我们创建Android应用程序的时候,一般会先创建一个Activity。PhoneGap应用程序创建时Activity应继承DroidGap类。当Activi...

weixin_29038345的博客 174

phonegap java js_android phonegap js <-> java交互原理

项目里 用了一下 phonegap来 包装我们的client java jar, 已提供js接口. 其中 从js到java 的调用还是颇有点神秘感. 就顺便看了看phonegap的实现.cordova5.1.1:https://github.com/apache/cordova-android/archive/5.1.1.zip在android上, phonegap使用了WebView.http:...

weixin_39637924的博客 179

android phonegap js <-> java交互原理

项目里 用了一下 phonegap来 包装我们的client java jar, 已提供js接口. 其中 从js到java 的调用还是颇有点神秘感. 就顺便看了看phonegap的实现. cordova5.1.1: https://github.com/apache/cordova-android/archive/5.1.1.zip 在android上, phonegap使...

108

PhoneGap插件开发 js与Java之间的交互例子 详解

PhoneGap中js与Java之间相互调用有两种方式,分别是同步和异步。 1、同步方式:js调用Java类的方法,然后Java类的方法直接返回一个值给js端,这跟我们Java方法间的调用是差不多一个意思; 2、异步方式:js调用Java类的方法,但是Java类的方法可能要处理一系列的事情,比如请求数据,那么等Java类的方法执行完,通过回调把结果返回给js端,这就是异步方式,说白了其实就像是

LeBron_Six的专栏 7965

Android phoneGap 源码分析之js-android通讯原理

PhoneGap 最初是由「Nitobi」這間位於加拿大的公司在2008年8月所發起的,而到2010年中IBM也開始參與投入研發。它是一套能讓你選擇採用「New BSD」或「MIT」license的Open Source Mobile Framework,它主要的目的在於能讓開發人員透過一些Web技術(HTML+JavaScript)來存取行動裝置的Native API,而且它支援了Andro

不只是写代码的程序员 1452

Cordova/Phonegap Android中Java调用JavaScript

前言最近被一个小需求搞得焦头烂额的,连睡觉都会梦见自己在写代码.在两位大大的帮助下,今天终于解决了.赶紧把它记录下来先.需求这个需求是这样子的:在BroadcastReceiver中接收推送的消息,然后将收到的消息发给Javascript处理.看起来一点都不复杂是不是?但是网上一搜,结果都是JavaScript调用Java的,Java调用JavaScript的资料很少. 最终找到了两种方法,但原理

Make a difference 4819

phoneGap在iOS下运行原理简单分析

首先还是来张phoneGap的架构图 这副图讲了几个点: 1.UI是通过html,js,css来绘图的 2.底层Module是用object-C,java,C++等。phoneGap把web技术和编程语言相结合,phoneGap只用js封装了一部分的native API,例如camera,location等,具体业务逻辑还是要native去实现。 3.HTML re

zyy的专栏 1912

android平台phonegap框架实现原理

最近研究了下phonegap手机快速开发框架原理,重点探究了android平台上的phonegap框架源码,在参考cutesource写的phonegap源码分析后,更加深入理解了phonegap框架原理,其中有些思想或许在以后有帮助,故总结下phonegap框架中关键点。 1.  Phonegap如何实现跨平台? Phonegap在每个移动平台(iOS、android、blackberry、

瑞风轻拂 1万+

跨平台PhoneGap技术架构五:PhoneGap类间调用关系及Js和Java交互原理

前面几篇文章主要讲解了PhoneGap几个重要的类,如果看到这里,相信大家对PhoneGap也有了一定的了解。 PhoneGap类间调用关系 在讲解PhoneGap的交互原理之前,我们把原来的内容串讲一下,以加深理解。请看下面的类间调用关系图: 在我们创建Android应用程序的时候,一般会先创建一个Activity。PhoneGap应用程序创建时Activity应继承DroidGap类...

weixin_30645617的博客 132
上一篇: 【PhoneGap】环境安装配置浅析
下一篇: 【WebRTC】在IOS下编译WebRTC
StreamH
博客等级 码龄22年 47粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值