CN105743955A - 一种扩展JavaScript对象方法 - Google Patents
一种扩展JavaScript对象方法 Download PDFInfo
- Publication number
- CN105743955A CN105743955A CN201410768954.7A CN201410768954A CN105743955A CN 105743955 A CN105743955 A CN 105743955A CN 201410768954 A CN201410768954 A CN 201410768954A CN 105743955 A CN105743955 A CN 105743955A
- Authority
- CN
- China
- Prior art keywords
- javascript
- layer
- message
- java
- javascript object
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 49
- 230000008569 process Effects 0.000 claims description 9
- 238000005538 encapsulation Methods 0.000 claims description 6
- 230000009471 action Effects 0.000 claims description 3
- 238000012545 processing Methods 0.000 abstract description 3
- 230000001960 triggered effect Effects 0.000 abstract 1
- 230000006870 function Effects 0.000 description 22
- 101100268515 Mus musculus Serpina1b gene Proteins 0.000 description 5
- 238000012544 monitoring process Methods 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 3
- 238000012423 maintenance Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 238000011161 development Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- VYZAMTAEIAYCRO-UHFFFAOYSA-N Chromium Chemical compound [Cr] VYZAMTAEIAYCRO-UHFFFAOYSA-N 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 230000003044 adaptive effect Effects 0.000 description 1
- 238000013497 data interchange Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000004807 localization Effects 0.000 description 1
- 238000006116 polymerization reaction Methods 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
一种扩展JavaScript对象的方法,所述方法包括:页面调用JavaScript对象,并将调用请求通过JavaScript层的自定义对象,Java层的对象,JNI的对象传递到C++层的对象;C++层的对象根据请求调用本地组件进行异步处理;处理结束之后,返回回调消息;C++层对象将回调的消息内容封装为JSON格式,通过socket客户端发送;在Java层,socket服务端接收消息,并把消息放在当前显示的WebView中的消息队列中;JavaScript层的自定义对象定时从消息队列中取出消息;触发JavaScript对象的事件,将消息以事件的形式通知页面。
Description
技术领域
本发明涉及Android系统的Web应用领域,尤其涉及一种扩展JavaScript对象方法。
背景技术
随着HTML5的兴起,浏览器的功能逐渐丰富,可以实现一些本地化的功能,包括本地存储,视频播放等。以浏览器为载体的Web应用具有开发门槛低,容易移植等优点。为了丰富Web应用的功能,在构建Web应用的时候,一个重要的问题是需要将本地组件(一般为C/C++的动态库)的接口扩展为JavaScript(脚本,简写为JS)接口,供Web应用调用。
在现有技术中,如果要将本地组件扩展为JavaScript接口,需要在浏览器内核中将DOM(DocumentObjectModel,文档对象模型)模块扩展为DOM对象,然后将扩展的DOM对象注册给JavaScript引擎,扩展为对应的JavaScript对象。当JavaScript引擎解析JavaScript脚本时,调用JavaScript对象,然后通过DOM对象间接调用本地组件。
现有的在浏览器内核中扩展JavaScript对象的方法,需要编译Android系统的C++层浏览器内核源码,执行效率低;而且对于Android的不同版本,在浏览器内核中扩展的方案需要在不同的Android版本的源码中实现,通用性差,代码维护成本高。
发明内容
本发明的目的在于克服目前在Android系统浏览器内核中扩展JavaScript对象的方法中,存在的代码通用性差、维护成本高的缺陷,提供了一种扩展JavaScript对象的方法。
为了实现上述目的,本发明提供了一种扩展JavaScript对象的方法,包括:
步骤1)页面调用JavaScript对象,并将调用请求通过JavaScript层的自定义对象,Java层的对象,JNI的对象传递到C++层的对象;
步骤2)C++层的对象根据请求调用本地组件进行异步处理;
步骤3)当本地组件异步处理结束之后,返回回调消息;
步骤4)C++层对象将回调的消息内容封装为JSON格式,通过socket客户端发送;
步骤5)在Java层,socket服务端接收消息,并把消息放在当前显示的WebView中的消息队列中;
步骤6)JavaScript层的自定义对象定时从消息队列中取出消息;
步骤7)触发JavaScript对象的事件,将消息以事件的形式通知页面。
上述技术方案中,在所述步骤1)之前,对C++层,JNI层,Java层,JavaScript层的对象及其数据格式进行定义,包括:
步骤101)将C++层的对象封装为JSON格式;
步骤102)通过JNI将JSON格式的C++层的对象封装为Java对象;
步骤103)在WebView中基于Java对象注册自定义JavaScript对象;
步骤104)将JSON格式的自定义JavaScript对象转换为JavaScript对象。
上述技术方案中,所述步骤1)还包括:
在JavaScript对象中声明handlers属性,并实现addEventListener,removeEventListener和fireEvent这三个函数;将JavaScript对象事件命名为onPlay;页面调用JavaScript对象的addEventListener函数注册onPlay事件监听函数。
上述技术方案中,所述步骤5)中的消息队列为栈结构。
本发明的优点在于:
1、本发明的方法可以有效地解决本地组件和JavaScript对象之间的异步调用问题,相比于现有的在浏览器内核中扩展JavaScript对象的方法,本发明的方法不需要编译Android系统的C++层内核源码,提高了开发效率;
2、本发明的方法一次实现可以在多个Android版本中使用,通用性好。
附图说明
图1为本发明的扩展JavaScript对象的方法的示意图;
图2为本发明的各层对象的数据传递关系图;
图3为本发明的WebView和TVSEOTT的栈的示意图。
具体实施方式
在Android系统的应用开发框架中,为开发者提供了WebView组件。WebView是基于WebKit内核的浏览器组件,WebKit是用C++开发的浏览器内核,在Android系统中作为第三方库,WebKit是网页的布局和渲染引擎,将HTML/CSS/JavaScript脚本渲染为可见的页面,WebView是WebKit的Java层视图类。通过WebView组件,可以在Android应用程序中实现Web浏览功能,处理网络请求,显示页面。WebView提供了addJavascriptInterface接口,可以将Java对象注册到WebView中,在页面中可以通过JavaScript对象调用Java对象。但是如果要让JavaScript能够调用C++组件的接口,还需要完成Java和C++的相互调用。
在Android系统中,可以实现Java和C++的相互调用。AndroidNDK(NativeDevelopmentKit)是一套工具集合,允许使用C/C++语言实现应用程序的一部分,适用于开发的应中需要调用C++库这种情况。在Android的NDK开发中,需要通过JNI(JavaNativeInterface,Java本地接口)来实现Java和C++代码的互相调用。JNI支持Java和C/C++代码进行交互,并且有自己的原始数据类型和数据引用类型。
为了方便在C++层,Java层和JavaScript层之间测参数传递,在C++层做一层适配,将第三方库的返回结果封装为JSON(JavaScriptObjectNotation)字符串形式。JSON是一种轻量级的数据交换格式,用于描述数据结构,形式包括:对象,名称/值,值的有序列表,字符串,数值和布尔值。这种做法有如下两个好处,一是方便通过JNI的jstring类型传递参数;二是方便在JavaScript中通过eval函数来解析,还原为JavaScript对象。
在JavaScript层中,为了给Web开发者提供JavaScriptAPI,需要在JavaScript层将从Java层获取的JSON格式返回值转换为JavaScript对象,然后将对象的属性和方法进行封装,并提供事件机制。
实现本地组件和JavaScript对象的异步调用是一个难点,利用DOM事件模型,可以为JavaScript对象扩展自定义事件,实现与本地组件之间的异步调用。
DOM事件模型可以分为DOM0级别和DOM2级别两种类型。在DOM0级别的事件模型中,事件被注册为HTML元素的一个属性。例如button元素的onclick事件,假设btn是一个button元素,则通过代码:btn.onclick=function()即可注册button的onclick事件,当按钮被鼠标单击时,就会调用监听函数,做出响应。DOM0级别的事件功能简单,使用方便。所有支持JavaScript的浏览器都支持DOM0级别的事件。
DOM2级别的事件模型,有两个主要的方法:addEventListener方法用于注册某个事件的监听函数,removeEventListener方法用于删除某个事件的监听函数,所有的DOM2节点都包含这两个方法。相比于DOM0级别的事件模型,DOM2级别事件模型功能强大,Chrome,Firefox,IE9等主流的浏览器都支持DOM2级别的DOM事件模型。
DOM中的事件模型是在浏览器内核中实现的,当JavaScript和DOM进行交互时,可以使用浏览器内部的事件处理机制,当JavaScript对象不是DOM元素时,需要在自定义的JavaScript对象中扩展事件机制。
本发明的方法基于AndroidNDK,将本地组件扩展为JavaScript接口,供上层页面调用。JavaScript调用本地组件时,可以通过同步调用和异步调用,在解决本地组件和JavaScript接口异步调用问题时,采用socket传递并在JavaScript层中定时取出消息,封装为JavaScript事件方式进行支持。
下面结合附图和具体实施例对本发明的方法做进一步的说明。
本实施例为:将本地C++动态库组件通过异步调用扩展为JavaScript对象,实现多源媒体聚合功能扩展。
如图1所示,一种扩展JavaScript对象的方法,包括:
步骤1)页面调用JavaScript对象,并将调用请求通过JavaScript层的自定义对象,Java层的对象,JNI的对象传递到C++层的对象;
如图2所示,在所述步骤1)之前,对C++层,JNI层,Java层,JavaScript层的对象及其数据格式进行定义,包括:
步骤101)将C++层的对象封装为JSON格式;
C++层的主要工作是对第三方库的返回结果做封装和适配,便于参数的传递和JavaScript层的处理。
将C++的对象定义为OTTVideo,对象OTTVideo可调用本地功能组件,通过开源库jsoncpp将第三方库的返回值封装为JSON格式,以字符串的形式返回,供JNI调用。
步骤102)通过JNI将JSON格式的C++层的对象封装为Java对象;
将Java层对象定义为TVSEOTT,将TVSEOTT对象调用的C++的方法声明为native方法。在JNI的OTTVideoJni.cpp中实现TVSEOTT.java中的native方法,这需要实现Java方法和native方法的映射表,注册给Java虚拟机(JVM),这样JVM就可以通过函数映射表来调用相应的函数,Java与JNI通过JNINativeMethod(在jni.h中定义)的结构来建立联系。
在OTTVideoJni.cpp中调用OTTVideo中的方法,完成对第三方库的调用。将OTTVideoJni.cpp,OTTVideo和第三方库打包为动态库,在TVSEOTT中通过System.loadLibrary方法加载到内存中,这样通过JNI可以实现Java层的TVSEOTT到C++层的OTTVideo的调用。
步骤103)在WebView中基于Java对象注册自定义JavaScript对象;
在WebView中通过addJavascriptInterface方法,将TVSEOTT对象注册为自定义JavaScript对象,对象名为ottvideo_js,这样在JavaScript中可以使用ottvideo_js调用C++层代码。
步骤104)将JSON格式的自定义JavaScript对象转换为JavaScript对象;
自定义JavaScript对象ottvideo_js调用C++层代码,返回结果为JSON格式的字符串,不能直接使用;在JavaScript层将需要扩展的多源媒体聚合的JavaScript对象定义为ottvideo,它调用ottvideo_js获取结果,然后通过JavaScript层的eval函数将JSON格式的字符串转化为JavaScript对象。
在JavaScript对象ottvideo声明handlers属性,并实现addEventListener,removeEventListener和fireEvent这三个函数。将JavaScript对象事件命名为onPlay。
页面调用ottvideo对象的addEventListener函数注册onPlay事件监听函数。当页面请求视频的播放连接时,将请求依次通过JavaScript层中的ottvideo,ottvideo_js,Java层的TVSEOTT,JNI中的OTTVideoJni传递到C++层的OTTVideo。
步骤2)C++层的对象根据请求调用本地组件进行异步处理;
步骤3)当本地组件异步处理结束之后,返回回调消息;
步骤4)C++层对象将回调的消息内容封装为JSON格式,通过socket客户端发送;
在OTTVideo中,当被第三方库回调时,C++层的对象将回调的消息内容封装为JSON格式,通过socket客户端发送;
步骤5)在Java层,socket服务端接收消息,并把消息放在当前显示的WebView中的消息队列中;
如图3所示,在Java层实现socket服务端,接收C++层socket客户端发来的消息。在应用中,可能打开多个WebView窗口,每个WebView窗口都包含一个TVSEOTT的Java对象,所以要将底层C++传来的消息发送给优先级高的WebView中的TVSEOTT的对象,这就需要建立一个元素为<WebView,TVSEOTT>的栈,每次调用栈顶WebView的TVSEOTT对象的setMessage,将C++回调的消息传给当前显示的WebView的TVSEOTT对象,并在TVSEOTT内部维护消息队列,存放消息。
步骤6)JavaScript层的自定义对象定时从消息队列中取出消息;
在TVSEOTT中定义getMessage方法,返回JSON格式的消息;在ottvideo_js对象中通过setInterval方法,定时从TVSEOTT中通过调用其getMessage取出消息;
步骤7)触发JavaScript对象的事件,将消息以事件的形式通知页面。
在JavaScript层ottvideo对象调用ottvideo_js获取结果,然后通过JavaScript的eval函数将JSON格式的字符串转化为JavaScript对象。
调用函数fireEvent触发ottvideo中onPlay事件,并调用响应的监听函数做对onPlay事件的处理工作,将消息以事件的形式通知页面。
最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制。尽管参照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,对本发明的技术方案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。
Claims (4)
1.一种扩展JavaScript对象的方法,所述方法包括:
步骤1)页面调用JavaScript对象,并将调用请求通过JavaScript层的自定义对象,Java层的对象,JNI的对象传递到C++层的对象;
步骤2)C++层的对象根据请求调用本地组件进行异步处理;
步骤3)当本地组件异步处理结束之后,返回回调消息;
步骤4)C++层对象将回调的消息内容封装为JSON格式,通过socket客户端发送;
步骤5)在Java层,socket服务端接收消息,并把消息放在当前显示的WebView中的消息队列中;
步骤6)JavaScript层的自定义对象定时从消息队列中取出消息;
步骤7)触发JavaScript对象的事件,将消息以事件的形式通知页面。
2.根据权利要求1所述的扩展JavaScript对象的方法,其特征在于,在所述步骤1)之前,对C++层,JNI层,Java层,JavaScript层的对象及其数据格式进行定义,包括:
步骤101)将C++层的对象封装为JSON格式;
步骤102)通过JNI将JSON格式的C++层的对象封装为Java对象;
步骤103)在WebView中基于Java对象注册自定义JavaScript对象;
步骤104)将JSON格式的自定义JavaScript对象转换为JavaScript对象。
3.根据权利要求1所述的扩展JavaScript对象的方法,其特征在于,所述步骤1)还包括:
在JavaScript对象中声明handlers属性,并实现addEventListener,removeEventListener和fireEvent这三个函数;将JavaScript对象事件命名为onPlay;页面调用JavaScript对象的addEventListener函数注册onPlay事件监听函数。
4.根据权利要求1所述的扩展JavaScript对象的方法,其特征在于,所述步骤5)中的消息队列为栈结构。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410768954.7A CN105743955B (zh) | 2014-12-11 | 2014-12-11 | 一种扩展JavaScript对象方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410768954.7A CN105743955B (zh) | 2014-12-11 | 2014-12-11 | 一种扩展JavaScript对象方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105743955A true CN105743955A (zh) | 2016-07-06 |
CN105743955B CN105743955B (zh) | 2018-11-13 |
Family
ID=56240855
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410768954.7A Expired - Fee Related CN105743955B (zh) | 2014-12-11 | 2014-12-11 | 一种扩展JavaScript对象方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105743955B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109032583A (zh) * | 2018-07-25 | 2018-12-18 | 北京小米移动软件有限公司 | 数据交互方法及装置 |
CN109460237A (zh) * | 2018-10-25 | 2019-03-12 | 北京顶象技术有限公司 | 代码的编译方法及装置 |
CN109634549A (zh) * | 2018-10-23 | 2019-04-16 | 中国平安人寿保险股份有限公司 | 音频播放方法、音频播放器、计算机装置及可读存储介质 |
CN109831701A (zh) * | 2019-01-28 | 2019-05-31 | 四川长虹电器股份有限公司 | 数字电视设备浏览器以及跨页面系统事件的扩展方法 |
CN110851240A (zh) * | 2019-11-18 | 2020-02-28 | 北京小米移动软件有限公司 | 功能调用方法、装置及存储介质 |
CN111506853A (zh) * | 2020-04-23 | 2020-08-07 | 山东旗帜信息有限公司 | 一种webview页面处理方法及装置 |
CN111966427A (zh) * | 2020-08-17 | 2020-11-20 | 四川长虹电器股份有限公司 | 一种Android native调用Java API的实现方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102830959A (zh) * | 2011-06-16 | 2012-12-19 | 中国科学院声学研究所 | 一种嵌入式浏览器接口动态扩展方法及系统 |
CN103064667A (zh) * | 2012-12-06 | 2013-04-24 | 郑州威科姆科技股份有限公司 | 一种基于JavaScript扩展控制硬件设备的方法 |
CN103309660A (zh) * | 2013-05-27 | 2013-09-18 | 北京尚友通达信息技术有限公司 | 移动应用跨平台开发方法 |
US20140280515A1 (en) * | 2013-03-15 | 2014-09-18 | Yottaa Inc. | System and method for managing multiple variants of an http object |
-
2014
- 2014-12-11 CN CN201410768954.7A patent/CN105743955B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102830959A (zh) * | 2011-06-16 | 2012-12-19 | 中国科学院声学研究所 | 一种嵌入式浏览器接口动态扩展方法及系统 |
CN103064667A (zh) * | 2012-12-06 | 2013-04-24 | 郑州威科姆科技股份有限公司 | 一种基于JavaScript扩展控制硬件设备的方法 |
US20140280515A1 (en) * | 2013-03-15 | 2014-09-18 | Yottaa Inc. | System and method for managing multiple variants of an http object |
CN103309660A (zh) * | 2013-05-27 | 2013-09-18 | 北京尚友通达信息技术有限公司 | 移动应用跨平台开发方法 |
Non-Patent Citations (2)
Title |
---|
刘春梅 等: "基于JavaScript引擎的终端动态数据处理方法", 《微计算机应用》 * |
李张永 等: "跨平台移动Web开发框架与数据交互方法", 《计算机工程与设计》 * |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109032583A (zh) * | 2018-07-25 | 2018-12-18 | 北京小米移动软件有限公司 | 数据交互方法及装置 |
CN109032583B (zh) * | 2018-07-25 | 2022-06-17 | 北京小米移动软件有限公司 | 数据交互方法及装置 |
CN109634549A (zh) * | 2018-10-23 | 2019-04-16 | 中国平安人寿保险股份有限公司 | 音频播放方法、音频播放器、计算机装置及可读存储介质 |
CN109460237A (zh) * | 2018-10-25 | 2019-03-12 | 北京顶象技术有限公司 | 代码的编译方法及装置 |
CN109831701A (zh) * | 2019-01-28 | 2019-05-31 | 四川长虹电器股份有限公司 | 数字电视设备浏览器以及跨页面系统事件的扩展方法 |
CN109831701B (zh) * | 2019-01-28 | 2021-12-21 | 四川长虹电器股份有限公司 | 数字电视设备浏览器以及跨页面系统事件的扩展方法 |
CN110851240A (zh) * | 2019-11-18 | 2020-02-28 | 北京小米移动软件有限公司 | 功能调用方法、装置及存储介质 |
CN110851240B (zh) * | 2019-11-18 | 2022-04-29 | 北京小米移动软件有限公司 | 功能调用方法、装置及存储介质 |
CN111506853A (zh) * | 2020-04-23 | 2020-08-07 | 山东旗帜信息有限公司 | 一种webview页面处理方法及装置 |
CN111506853B (zh) * | 2020-04-23 | 2024-01-19 | 山东旗帜信息有限公司 | 一种webview页面处理方法及装置 |
CN111966427A (zh) * | 2020-08-17 | 2020-11-20 | 四川长虹电器股份有限公司 | 一种Android native调用Java API的实现方法 |
CN111966427B (zh) * | 2020-08-17 | 2022-06-21 | 四川长虹电器股份有限公司 | 一种Android native调用Java API的实现方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105743955B (zh) | 2018-11-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105743955A (zh) | 一种扩展JavaScript对象方法 | |
CN109002362B (zh) | 一种服务方法、装置、系统以及电子设备 | |
KR102436987B1 (ko) | 웹페이지 콘텐츠를 추출하기 위한 방법 및 단말 장치 | |
WO2018072626A1 (zh) | 组件调用的方法和装置、组件数据处理的方法和装置 | |
KR102105261B1 (ko) | 인터페이스 데이터 디스플레이 방법 및 장치 | |
US9448776B1 (en) | Method and apparatus for converting a website into a native mobile application | |
US8966508B2 (en) | Method for executing hybrid web application and apparatus therefor | |
CN108572965B (zh) | 一种资源加载方法及装置 | |
US10346501B2 (en) | Mobile enablement of existing web sites | |
CN109388766A (zh) | 页面加载的方法和装置 | |
CN111090431B (zh) | 一种数据处理方法及装置 | |
CN102880708B (zh) | 用于实现html页面的可视化设计的系统和方法 | |
CN112579118B (zh) | 微服务的配置信息更新方法、装置、系统、介质和设备 | |
CN106020823A (zh) | 一种前端Web表现与数据分离以及页面快速响应的方式 | |
US20150143348A1 (en) | Hybrid dynamic code compiling device, method, and service system thereof | |
CN107450928B (zh) | 一种基于缓存技术的混合开发方法 | |
CN108170430B (zh) | 一种界面展示的方法及系统 | |
CN110806868A (zh) | 一种单页面搭建及加载方法 | |
CN115934855A (zh) | 一种全链路字段级血缘解析方法、系统、设备及存储介质 | |
US9292252B2 (en) | Methods and apparatus for voiced-enabling a web application | |
WO2023082654A1 (zh) | 一种业务交互图生成方法、装置、设备及存储介质 | |
CN111857658A (zh) | 一种渲染动态组件的方法、装置、介质和电子设备 | |
CN110069247A (zh) | 一种应用程序的开发方法及装置、使用方法及装置 | |
CN102981845A (zh) | 浏览器进行页面元素处理的方法及装置 | |
CN113360385A (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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20181113 |
|
CF01 | Termination of patent right due to non-payment of annual fee |