CN105468369B - 移动平台上JavaScript调用原生功能的方法以及系统 - Google Patents

移动平台上JavaScript调用原生功能的方法以及系统 Download PDF

Info

Publication number
CN105468369B
CN105468369B CN201510812727.4A CN201510812727A CN105468369B CN 105468369 B CN105468369 B CN 105468369B CN 201510812727 A CN201510812727 A CN 201510812727A CN 105468369 B CN105468369 B CN 105468369B
Authority
CN
China
Prior art keywords
calling
primary
javascript
result
primary function
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201510812727.4A
Other languages
English (en)
Other versions
CN105468369A (zh
Inventor
郑彬
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
SHENZHEN LAN-YOU TECHNOLOG Co Ltd
Original Assignee
SHENZHEN LAN-YOU TECHNOLOG Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by SHENZHEN LAN-YOU TECHNOLOG Co Ltd filed Critical SHENZHEN LAN-YOU TECHNOLOG Co Ltd
Priority to CN201510812727.4A priority Critical patent/CN105468369B/zh
Publication of CN105468369A publication Critical patent/CN105468369A/zh
Application granted granted Critical
Publication of CN105468369B publication Critical patent/CN105468369B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/449Object-oriented method invocation or resolution

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Stored Programmes (AREA)
  • Mobile Radio Communication Systems (AREA)

Abstract

一种移动平台上JavaScript调用原生功能的方法以及系统,方法包括:S1、JavaScript在调用原生功能时触发经过重写的提示对话框方法,在网页加载时启动轮询以不断地触发提示对话框方法;S2、提示对话框方法对其参数进行解析,如判断执行原生功能,则继续对参数进行解析以获取功能组件信息和调用方式,再执行S3并结束;如判断查找消息队列则执行S4;S3、根据开放的JavaScript接口实现原生功能的调用,如为异步调用,则在新线程中调用对应的功能组件,新线程在完成后把结果放入消息队列中;如为同步调用,则在主线程中调用功能组件;S4、根据开放的JavaScript接口实现从消息队列中检索结果。本发明可异步调用原生功能,统一了调用的模式,提高了JavaScript与原生功能互相调用的灵活性。

Description

移动平台上JavaScript调用原生功能的方法以及系统
技术领域
本发明涉及移动互联网技术领域,尤其涉及一种移动平台上JavaScript调用原生功能的方法以及系统。
背景技术
在开发移动应用时,会用到webview控件(浏览器控件)进行加载网页展示进行交互,会出现javascript调用native code(原生功能)或者native code调用javascript的情况。通常做法是利用原生API进行操作。参考图1,javascript位于前端逻辑层,native code是属于底层原生层,其中,javascript调用native code的具体方法是,WebKit的原生API暴露一个native code的对象给js,即图中所示意的原生层开放的javascript接口,使得javascript可以通过这个javascript接口直接调用native code。这种方法对效率不高,不能异步操作,特别是对于执行时间较长的js操作,会产生阻塞,调用起来不统一,方法多了管理代码会混乱,不利于工程的后期维护与扩张。
发明内容
本发明要解决的技术问题在于,针对现有技术的上述缺陷,提供一种移动平台上JavaScript调用原生功能的方法以及系统。
本发明解决其技术问题所采用的技术方案是:构造一种移动平台上JavaScript调用原生功能的方法,所述方法包括:
S1、JavaScript在调用原生功能时触发浏览器控件中的经过重写的提示对话框方法,所述JavaScript在网页加载时启动轮询以不断地触发所述提示对话框方法;
S2、经过重写的提示对话框方法在触发后,首先对其参数进行解析,如果根据解析结果判断执行原生功能,则继续对参数进行解析以获取功能组件信息和调用方式,再执行步骤S3并结束;如果根据解析结果判断查找消息队列则执行步骤S4并结束;
S3、根据开放的JavaScript接口实现原生功能的调用,如果调用方式为异步调用,则实例化新线程,在新线程中根据所述功能组件信息调用对应的功能组件,启动新线程后主线程原路返回,所述新线程在完成后把结果放入消息队列中;如果调用方式为同步调用,则在主线程中根据所述功能组件信息调用对应的功能组件,并在调用完毕后将执行结果原路返回;
S4、根据开放的JavaScript接口实现从所述消息队列中检索结果。
在本发明所述的移动平台上JavaScript调用原生功能的方法中,所述步骤S2包括:
S21、如果提示对话框方法判断出默认字符串参数的前缀与预设的表示执行原生功能的字符串相同,则根据默认字符串参数的位于前缀后面的字符串获取以下参数数据:与功能组件唯一对应的组件ID、与返回结果唯一对应的CallbackId、调用方式以及其他参数,再执行步骤S3并结束;
S22、如果提示对话框方法判断默认字符串参数的前缀与预设的表示查找消息队列的字符串相同,则根据默认字符串参数的位于前缀后面的字符串获取与返回结果唯一对应的CallbackId,再执行S4并结束;
S23、如果前缀不属于以上的两种情况,则执行默认的操作,弹出提示对话框。
在本发明所述的移动平台上JavaScript调用原生功能的方法中,所述步骤S3包括:
S31、将S21中获取的参数数据发送给浏览器控件中的具有JavaScript接口的原生对象中的原生功能调用方法,原生对象再把参数数据发送给组件管理类的原生功能调用方法,组件管理类中的原生功能调用方法在判断调用方式为异步调用时,执行步骤S32并结束,在判断调用方式为同步调用时,执行步骤S33并结束;
S32、实例化新线程,在新线程中根据组件ID调用对应的功能组件,启动新线程后主线程原路返回,所述新线程在完成后把执行结果与CallbackId绑定后放入消息队列中;
S33、在主线程中根据组件ID调用对应的功能组件,并在调用完毕后将执行结果原路返回;
S34、将S22中获取的CallbackId发送给浏览器控件中的具有JavaScript接口的原生对象中的接收JS消息方法,接收JS消息方法根据CallbackId从消息队列中查询结果,并在有对应的结果时将结果原路返回到网页中。
在本发明所述的移动平台上JavaScript调用原生功能的方法中,所述的启动轮询为:以预设时间间隔调用prompt()方法,prompt()方法再触发经过重写的提示对话框方法。
本发明还公开了一种移动平台上JavaScript调用原生功能的系统,包括位于前端逻辑层的JavaScript模块和位于底层原生层中的浏览器控件、组件管理类、消息队列、执行多种原生功能的多种功能组件;所述JavaScript模块包括调用原生功能子模块和轮询子模块,浏览器控件包括JS触发模块、开放有JavaScript接口的执行原生功能模块、开放有JavaScript接口的检索消息模块;
调用原生功能子模块用于触发JS触发模块中的经过重写的提示对话框方法;轮询子模块用于在网页加载时启动轮询以不断地触发所述JS触发模块中的提示对话框方法;
JS触发模块中的经过重写的提示对话框方法在执行时,首先对其参数进行解析,如果根据解析结果判断执行原生功能,则继续对参数进行解析以获取功能组件信息和调用方式,与执行原生功能模块的JavaScript接口配合以实现原生功能的调用;如果根据解析结果判断查找消息队列则与检索消息模块的JavaScript接口配合以实现从消息队列中检索结果;
组件管理类用于与执行原生功能模块配合实现原生功能的调用,如果调用方式为异步调用,则实例化新线程,在新线程中根据所述功能组件信息调用对应的功能组件,启动新线程后主线程原路返回,所述新线程在完成后把结果放入消息队列中;如果调用方式为同步调用,则在主线程中根据所述功能组件信息调用对应的功能组件,并在调用完毕后将执行结果原路返回。
在本发明所述的移动平台上JavaScript调用原生功能的系统中,JS触发模块中的经过重写的提示对话框方法具体包括:
如果提示对话框方法判断出默认字符串参数的前缀与预设的表示执行原生功能的字符串相同,则根据默认字符串参数的位于前缀后面的字符串获取以下参数数据:与功能组件唯一对应的组件ID、与返回结果唯一对应的CallbackId、调用方式以及其他参数;
如果提示对话框方法判断默认字符串参数的前缀与预设的表示查找消息队列的字符串相同,则根据默认字符串参数的位于前缀后面的字符串获取与返回结果唯一对应的CallbackId;
如果前缀不属于以上的两种情况,则执行默认的操作,弹出提示对话框。
在本发明所述的移动平台上JavaScript调用原生功能的系统中,所述执行原生功能模块的具有JavaScript接口的原生对象中的原生功能调用方法获取JS触发模块中的参数数据,再把参数数据发送给组件管理类的原生功能调用方法;
组件管理类中的原生功能调用方法在判断调用方式为异步调用时,实例化新线程,在新线程中根据组件ID调用对应的功能组件,启动新线程后主线程原路返回,所述新线程在完成后把执行结果与CallbackId绑定后放入消息队列中;组件管理类中的原生功能调用方法在判断调用方式为同步调用时,在主线程中根据组件ID调用对应的功能组件,并在调用完毕后将执行结果原路返回;
检索消息模块中的具有JavaScript接口的原生对象中的接收JS消息方法获取JS触发模块中的CallbackId,并根据CallbackId从消息队列中查询结果,并在有对应的结果时将结果原路返回到网页中。
在本发明所述的移动平台上JavaScript调用原生功能的系统中,所述的启动轮询为:以预设时间间隔调用prompt()方法,prompt()方法再触发JS触发模块中的经过重写的提示对话框方法。
实施本发明的移动平台上JavaScript调用原生功能的方法以及系统,具有以下有益效果:本发明重写了提示对话框方法,根据重写后的方法中的参数可以确定执行同步调用还是异步调用,并对于异步调用的情况,通过新线程执行完原生功能,并把结果放到了消息队列中,通过Prompt轮询可以在重写的提示对话框方法的基础上,从消息队列读取异步调用的返回结果。因此,本发明解决了JavaScript不能异步调用原生功能的缺陷,统一了调用的模式,提高了JavaScript与原生功能互相调用的灵活性。
附图说明
下面将结合附图及实施例对本发明作进一步说明,附图中:
图1是传统的JavaScript调用原生功能的结构示意图;
图2是本发明移动平台上JavaScript调用原生功能的方法的流程图;
图3是本发明移动平台上JavaScript调用原生功能的系统的结构示意图。
具体实施方式
为了对本发明的技术特征、目的和效果有更加清楚的理解,现对照附图详细说明本发明的具体实施方式。
参考图2,是本发明移动平台上JavaScript调用原生功能的方法的流程图
本发明的方法包括:
S1、JavaScript在调用原生功能时触发浏览器控件中的经过重写的提示对话框方法,所述JavaScript在网页加载时启动轮询以不断地触发所述提示对话框方法;
S2、经过重写的提示对话框方法在触发后,首先对其参数进行解析,如果根据解析结果判断执行原生功能,则继续对参数进行解析以获取功能组件信息和调用方式,再执行步骤S3并结束;如果根据解析结果判断查找消息队列则执行步骤S4并结束;
其中,步骤S2实际上就是重写的提示对话框方法的具体重写内容。
S3、根据开放的JavaScript接口实现原生功能的调用,如果调用方式为异步调用,则实例化新线程,在新线程中根据所述功能组件信息调用对应的功能组件,启动新线程后主线程原路返回,所述新线程在完成后把结果放入消息队列中;如果调用方式为同步调用,则在主线程中根据所述功能组件信息调用对应的功能组件,并在调用完毕后将执行结果原路返回;
S4、根据开放的JavaScript接口实现从消息队列中检索结果。
下面对各个步骤进行详细阐述。
步骤S1中,重写提示对话框方法即重写WebChromClient类的onJsPrompt()方法。onJsPrompt()原来的功能是弹出提示对话框,本发明对onJsPrompt()进行重写,一方面可以帮助区别同步调用和异步调用,另一方面在异步调用时,结果是统一放到消息队列中的,利用重写的onJsPrompt()进行Prompt轮询即可达到获取消息队列中的异步操作返回结果的目的。
其中,启动Prompt轮询是指:以预设时间间隔调用prompt()方法,prompt()方法再触发经过重写的onJsPrompt()。
步骤S2实质上就是重写的onJsPrompt()的运行过程,通过此步骤可以看出本发明对onJsPrompt()的重写的具体内容,步骤S2包括:
S21、如果提示对话框方法判断出默认字符串参数的前缀与预设的表示执行原生功能的字符串相同,则根据默认字符串参数的位于前缀后面的字符串获取以下参数数据:与功能组件唯一对应的组件ID、与返回结果唯一对应的CallbackId、调用方式以及其他参数,再执行步骤S3并结束;
众所周知,onJsPrompt()的定义如下:
public boolean onJsPrompt(WebView view,String url,String message,String defaultValue,final JsPromptResult result)。步骤S21中所提到的默认字符串参数即是第四个参数:String defaultValue。
假如,预设的表示执行原生功能的字符串定义为:“nativeFuc://”(注意,此处是指引号内的内容,不包括引号,当然表示执行原生功能的字符串是可以根据情况设定的,例如也可以为“nativeFuction://”,对此不做限制),那么通过if(defaultValue.startsWith("nativeFuc://"))即可判断defaultValue的前缀与预设的表示执行原生功能的字符串是否相同。
在相同的情况下,因为“nativeFuc://”总共是12个字符,所以从defaultValue的第12个字符往后的所有字符即表示的组件ID、CallbackId、调用方式、其他参数。所以先通过String jsonStr=defaultValue.substring(12)获取“nativeFuc://”这个后缀往后的字符串的内容(同理,如果是“nativeFuction://”,则通过String jsonStr=defaultValue.substring(16)获取),然后通过JSONArray jsonArray=new JSONArray(jsonStr)其转换为JSONArray。那么,组件ID、CallbackId、调用方式、其他参数可以依次通过jsonArray.get(0)、jsonArray.get(1)、jsonArrayget(2)、jsonArrayget(3)获取。
S22、如果提示对话框方法判断默认字符串参数的前缀与预设的表示查找消息队列的字符串相同,则根据默认字符串参数的位于前缀后面的字符串获取与返回结果唯一对应的CallbackId,再执行S4并结束;
假如,预设的表示查找消息队列的字符串定义为:“msg_poll:”,那么可以通过if(defaultValue.startsWith("msg_poll:"))进行判断,因"msg_poll:"的长度为9,所以从defaultValue的第9个字符往后的所有字符即表示CallbackId,那么CallbackID即可通过defaultValue.substring(9)获取。
S23、如果前缀不属于以上的两种情况,则执行默认的操作,弹出提示对话框。
在步骤S3中,以下步骤S31-S33表示执行原生调用,步骤S34表示查找消息队列,即上述步骤S21在执行完毕后转入步骤S31,上述步骤S22在执行完毕后转入步骤S34。
S31、将S21中获取的参数数据发送给浏览器控件中的具有JavaScript接口的原生对象中的原生功能调用方法,原生对象再把参数数据发送给组件管理类的原生功能调用方法,组件管理类中的原生功能调用方法在判断调用方式为异步调用时,执行步骤S32并结束,在判断调用方式为同步调用时,执行步骤S33并结束;
即将S21中获取的组件ID、CallbackId、调用方式、其他参数作为标注了javascript接口的原生对象的exce()方法的参数,原生对象的exce()方法再把参数传给组件管理类的exce(组件ID、CallbackId、调用方式、其他参数)方法,exce()方法根据传进来的参数可以判断是同步调用还是异步调用,进而执行步骤S32或者S33。
S32、实例化新线程,在新线程中根据组件ID调用对应的功能组件,启动新线程后主线程原路返回,所述新线程在完成后把执行结果与CallbackId绑定后放入消息队列中;
S33、在主线程中根据组件ID调用对应的功能组件,并在调用完毕后将执行结果原路返回;
S34、将S22中获取的CallbackId发送给浏览器控件中的具有JavaScript接口的原生对象中的接收JS消息方法,即将S22中获取的CallbackId作为标注了javascript接口的原生对象的retrieveJsMessages()方法的参数,retrieveJsMessages(CallbackId)根据CallbackId从消息队列中查询结果,并在有对应的结果时将结果原路返回到网页中,对应该CallbackId的一个异步调用结束。
相应的参考图3,本发明还公开了移动平台上JavaScript调用原生功能的系统,系统包括:
位于前端逻辑层的JavaScript模块和位于底层原生层中的浏览器控件、组件管理类、消息队列、执行多种原生功能的多种功能组件;所述JavaScript模块包括调用原生功能子模块和轮询子模块,浏览器控件包括JS触发模块、开放有JavaScript接口的执行原生功能模块、开放有JavaScript接口的检索消息模块;
调用原生功能子模块用于触发JS触发模块中的经过重写的提示对话框方法;轮询子模块用于在网页加载时启动轮询以不断地触发所述提示对话框方法;
JS触发模块中的经过重写的提示对话框方法在执行时,首先对其参数进行解析,如果根据解析结果判断执行原生功能,则继续对参数进行解析以获取功能组件信息和调用方式,与执行原生功能模块的JavaScript接口配合以实现原生功能的调用;如果根据解析结果判断查找消息队列则与检索消息模块的JavaScript接口配合以实现从消息队列中检索结果;
组件管理类用于与执行原生功能模块配合实现原生功能的调用,如果调用方式为异步调用,则实例化新线程,在新线程中根据所述功能组件信息调用对应的功能组件,启动新线程后主线程原路返回,所述新线程在完成后把结果放入消息队列中;如果调用方式为同步调用,则在主线程中根据所述功能组件信息调用对应的功能组件,并在调用完毕后将执行结果原路返回。
其中,JS触发模块中的经过重写的提示对话框方法具体包括:
如果提示对话框方法判断出默认字符串参数的前缀与预设的表示执行原生功能的字符串相同,则根据默认字符串参数的位于前缀后面的字符串获取以下参数数据:与功能组件唯一对应的组件ID、与返回结果唯一对应的CallbackId、调用方式以及其他参数;
如果提示对话框方法判断默认字符串参数的前缀与预设的表示查找消息队列的字符串相同,则根据默认字符串参数的位于前缀后面的字符串获取与返回结果唯一对应的CallbackId;
如果前缀不属于以上的两种情况,则执行默认的操作,弹出提示对话框。
其中:
所述执行原生功能模块的具有JavaScript接口的原生对象中的原生功能调用方法获取JS触发模块中的参数数据,再把参数数据发送给组件管理类的原生功能调用方法;
组件管理类中的原生功能调用方法在判断调用方式为异步调用时,实例化新线程,在新线程中根据组件ID调用对应的功能组件,启动新线程后主线程原路返回,所述新线程在完成后把执行结果与CallbackId绑定后放入消息队列中;组件管理类中的原生功能调用方法在判断调用方式为同步调用时,在主线程中根据组件ID调用对应的功能组件,并在调用完毕后将执行结果原路返回;
检索消息模块中的具有JavaScript接口的原生对象中的接收JS消息方法获取JS触发模块中的CallbackId,并根据CallbackId从消息队列中查询结果,并在有对应的结果时将结果原路返回到网页中,对应该CallbackId的一个异步调用结束。
其中:所述的启动轮询为:以预设时间间隔调用prompt()方法,prompt()方法再触发JS触发模块中的经过重写的提示对话框方法。
综上所述,实施本发明的移动平台上JavaScript调用原生功能的方法以及系统,具有以下有益效果:本发明重写了提示对话框方法,根据重写后的方法中的参数可以确定执行同步调用还是异步调用,并对于异步调用的情况,通过新线程执行完原生功能,并把结果放到了消息队列中,通过Prompt轮询可以在重写的提示对话框方法的基础上,从消息队列读取异步调用的返回结果。因此,本发明解决了JavaScript不能异步调用原生功能的缺陷,统一了调用的模式,提高了JavaScript与原生功能互相调用的灵活性。
上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,这些均属于本发明的保护之内。

Claims (6)

1.一种移动平台上JavaScript调用原生功能的方法,其特征在于,所述方法包括:
S1、JavaScript在调用原生功能时触发浏览器控件中的经过重写的提示对话框方法,所述JavaScript在网页加载时启动轮询以不断地触发所述提示对话框方法;
S2、经过重写的提示对话框方法在触发后,首先对其参数进行解析,如果根据解析结果判断执行原生功能,则继续对参数进行解析以获取功能组件信息和调用方式,再执行步骤S3并结束;如果根据解析结果判断查找消息队列则执行步骤S4并结束;
S3、根据开放的JavaScript接口实现原生功能的调用,如果调用方式为异步调用,则实例化新线程,在新线程中根据所述功能组件信息调用对应的功能组件,启动新线程后主线程原路返回,所述新线程在完成后把结果放入消息队列中;如果调用方式为同步调用,则在主线程中根据所述功能组件信息调用对应的功能组件,并在调用完毕后将执行结果原路返回;
S4、根据开放的JavaScript接口实现从所述消息队列中检索结果;
其中,所述步骤S2包括:
S21、如果提示对话框方法判断出默认字符串参数的前缀与预设的表示执行原生功能的字符串相同,则根据默认字符串参数的位于前缀后面的字符串获取以下参数数据:与功能组件唯一对应的组件ID、与返回结果唯一对应的CallbackId、调用方式以及其他参数,再执行步骤S3并结束;
S22、如果提示对话框方法判断默认字符串参数的前缀与预设的表示查找消息队列的字符串相同,则根据默认字符串参数的位于前缀后面的字符串获取与返回结果唯一对应的CallbackId,再执行S4并结束;
S23、如果前缀不属于以上的两种情况,则执行默认的操作,弹出提示对话框。
2.根据权利要求1所述的移动平台上JavaScript调用原生功能的方法,其特征在于,所述步骤S3包括:
S31、将S21中获取的参数数据发送给浏览器控件中的具有JavaScript接口的原生对象中的原生功能调用方法,原生对象再把参数数据发送给组件管理类的原生功能调用方法,组件管理类中的原生功能调用方法在判断调用方式为异步调用时,执行步骤S32并结束,在判断调用方式为同步调用时,执行步骤S33并结束;
S32、实例化新线程,在新线程中根据组件ID调用对应的功能组件,启动新线程后主线程原路返回,所述新线程在完成后把执行结果与CallbackId绑定后放入消息队列中;
S33、在主线程中根据组件ID调用对应的功能组件,并在调用完毕后将执行结果原路返回;
S34、将S22中获取的CallbackId发送给浏览器控件中的具有JavaScript接口的原生对象中的接收JS消息方法,接收JS消息方法根据CallbackId从消息队列中查询结果,并在有对应的结果时将结果原路返回到网页中。
3.根据权利要求1所述的移动平台上JavaScript调用原生功能的方法,其特征在于,所述的启动轮询为:以预设时间间隔调用prompt()方法,prompt()方法再触发经过重写的提示对话框方法。
4.一种移动平台上JavaScript调用原生功能的系统,其特征在于,包括位于前端逻辑层的JavaScript模块和位于底层原生层中的浏览器控件、组件管理类、消息队列、执行多种原生功能的多种功能组件;所述JavaScript模块包括调用原生功能子模块和轮询子模块,浏览器控件包括JS触发模块、开放有JavaScript接口的执行原生功能模块、开放有JavaScript接口的检索消息模块;
调用原生功能子模块用于触发JS触发模块中的经过重写的提示对话框方法;轮询子模块用于在网页加载时启动轮询以不断地触发所述JS触发模块中的提示对话框方法;
JS触发模块中的经过重写的提示对话框方法在执行时,首先对其参数进行解析,如果根据解析结果判断执行原生功能,则继续对参数进行解析以获取功能组件信息和调用方式,与执行原生功能模块的JavaScript接口配合以实现原生功能的调用;如果根据解析结果判断查找消息队列则与检索消息模块的JavaScript接口配合以实现从消息队列中检索结果;
组件管理类用于与执行原生功能模块配合实现原生功能的调用,如果调用方式为异步调用,则实例化新线程,在新线程中根据所述功能组件信息调用对应的功能组件,启动新线程后主线程原路返回,所述新线程在完成后把结果放入消息队列中;如果调用方式为同步调用,则在主线程中根据所述功能组件信息调用对应的功能组件,并在调用完毕后将执行结果原路返回;
其中,JS触发模块中的经过重写的提示对话框方法具体包括:
如果提示对话框方法判断出默认字符串参数的前缀与预设的表示执行原生功能的字符串相同,则根据默认字符串参数的位于前缀后面的字符串获取以下参数数据:与功能组件唯一对应的组件ID、与返回结果唯一对应的CallbackId、调用方式以及其他参数;
如果提示对话框方法判断默认字符串参数的前缀与预设的表示查找消息队列的字符串相同,则根据默认字符串参数的位于前缀后面的字符串获取与返回结果唯一对应的CallbackId;
如果前缀不属于以上的两种情况,则执行默认的操作,弹出提示对话框。
5.根据权利要求4所述的移动平台上JavaScript调用原生功能的系统,其特征在于,
所述执行原生功能模块的具有JavaScript接口的原生对象中的原生功能调用方法获取JS触发模块中的参数数据,再把参数数据发送给组件管理类的原生功能调用方法;
组件管理类中的原生功能调用方法在判断调用方式为异步调用时,实例化新线程,在新线程中根据组件ID调用对应的功能组件,启动新线程后主线程原路返回,所述新线程在完成后把执行结果与CallbackId绑定后放入消息队列中;组件管理类中的原生功能调用方法在判断调用方式为同步调用时,在主线程中根据组件ID调用对应的功能组件,并在调用完毕后将执行结果原路返回;
检索消息模块中的具有JavaScript接口的原生对象中的接收JS消息方法获取JS触发模块中的CallbackId,并根据CallbackId从消息队列中查询结果,并在有对应的结果时将结果原路返回到网页中。
6.根据权利要求4所述的移动平台上JavaScript调用原生功能的系统,其特征在于,所述的启动轮询为:以预设时间间隔调用prompt()方法,prompt()方法再触发JS触发模块中的经过重写的提示对话框方法。
CN201510812727.4A 2015-11-19 2015-11-19 移动平台上JavaScript调用原生功能的方法以及系统 Active CN105468369B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510812727.4A CN105468369B (zh) 2015-11-19 2015-11-19 移动平台上JavaScript调用原生功能的方法以及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510812727.4A CN105468369B (zh) 2015-11-19 2015-11-19 移动平台上JavaScript调用原生功能的方法以及系统

Publications (2)

Publication Number Publication Date
CN105468369A CN105468369A (zh) 2016-04-06
CN105468369B true CN105468369B (zh) 2019-03-26

Family

ID=55606112

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510812727.4A Active CN105468369B (zh) 2015-11-19 2015-11-19 移动平台上JavaScript调用原生功能的方法以及系统

Country Status (1)

Country Link
CN (1) CN105468369B (zh)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107957911B (zh) * 2016-10-18 2019-07-05 腾讯科技(深圳)有限公司 组件调用的方法和装置、组件数据处理的方法和装置
CN108052319B (zh) * 2016-10-27 2021-05-25 北京京东尚科信息技术有限公司 脚本模块引用原生资源的方法、装置及终端设备
CN106843850B (zh) * 2016-12-28 2020-05-15 北京五八信息技术有限公司 一种在React Native组件之间传递native对象的方法和装置
CN106874519B (zh) * 2017-03-20 2021-04-30 百度在线网络技术(北京)有限公司 页面展现方法和装置
CN106941568A (zh) * 2017-03-30 2017-07-11 努比亚技术有限公司 一种Toast弹窗优化显示方法、装置以及Toast弹窗调度方法和装置
CN108874554B (zh) * 2017-05-09 2020-11-10 腾讯科技(深圳)有限公司 信息通信方法及装置
CN107291465A (zh) * 2017-06-14 2017-10-24 北京小米移动软件有限公司 页面显示方法、装置及存储介质
CN109032583B (zh) * 2018-07-25 2022-06-17 北京小米移动软件有限公司 数据交互方法及装置
CN109213948B (zh) * 2018-10-18 2020-12-04 网宿科技股份有限公司 网页加载方法、中间服务器和网页加载系统
CN109976831A (zh) * 2019-03-28 2019-07-05 山东浪潮通软信息科技有限公司 一种JavaScript和原生APP之间数据交互方法
CN112667482B (zh) * 2020-12-31 2023-08-18 成都新希望金融信息有限公司 业务功能调用方法、移动终端和存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103106102A (zh) * 2013-01-14 2013-05-15 百度在线网络技术(北京)有限公司 一种web应用程序的运行方法及移动终端
CN103995694A (zh) * 2014-03-31 2014-08-20 中邮科通信技术股份有限公司 一种具备电信能力的移动客户端浏览器控件及其调用方法
CN104461575A (zh) * 2014-12-26 2015-03-25 北京华电万通科技有限公司 一种网页脚本语言跨移动操作系统平台原生接口调用的装置及方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103106102A (zh) * 2013-01-14 2013-05-15 百度在线网络技术(北京)有限公司 一种web应用程序的运行方法及移动终端
CN103995694A (zh) * 2014-03-31 2014-08-20 中邮科通信技术股份有限公司 一种具备电信能力的移动客户端浏览器控件及其调用方法
CN104461575A (zh) * 2014-12-26 2015-03-25 北京华电万通科技有限公司 一种网页脚本语言跨移动操作系统平台原生接口调用的装置及方法

Also Published As

Publication number Publication date
CN105468369A (zh) 2016-04-06

Similar Documents

Publication Publication Date Title
CN105468369B (zh) 移动平台上JavaScript调用原生功能的方法以及系统
CN105354034B (zh) 应用程序的页面跳转方法及装置
CN104182234B (zh) 一种业务处理方法和业务系统
CN103885764B (zh) 网络媒介信息展示系统、方法、装置和服务器
WO2015127882A1 (en) Method, apparatus and system for extracting webpage content
CN107562425A (zh) 基于Hybrid应用的单页面应用创建方法及装置
CN103179133B (zh) 基于实体类的客户端与服务器通信的方法
CN108197125A (zh) 网页抓取方法及装置
CN109388766A (zh) 页面加载的方法和装置
CN109840083A (zh) 网页组件模板构建方法、装置、计算机设备和存储介质
CN107203470B (zh) 页面调试方法和装置
KR20170135956A (ko) 인스턴트 메시징 창을 표시하기 위한 방법 및 장치 및 컴퓨터 판독 가능 매체
CN103559097B (zh) 一种浏览器中进程间通信的方法、装置和浏览器
CN103838851B (zh) 三维场景模型文件的渲染方法和装置
CN110674503B (zh) 一种基于图卷积神经网络的智能合约死循环检测方法
CN103095807A (zh) 一种实时显示前端设备录像下载进度的方法及系统
CN101873324B (zh) 穿越防火墙的方法
CN106582013A (zh) 游戏服务系统、用于向在线的游戏更新数据的方法和装置
CN102681996B (zh) 预读方法和装置
CN109347914A (zh) 一种基于Python Flask及装饰器的处理浏览器请求的方法及装置
CN103123592B (zh) 开放平台中应用程序的访问方法及系统
CN104732144B (zh) 一种基于伪协议的远程代码注入漏洞检测方法
CN103744663A (zh) 一种基于预缓存技术的Android界面设计框架模型
CN112287349A (zh) 安全漏洞检测方法及服务端
CN105068912A (zh) 用于执行网页任务的方法和装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant