CN113778391A - 原生应用程序的页面处理方法、装置及设备 - Google Patents
原生应用程序的页面处理方法、装置及设备 Download PDFInfo
- Publication number
- CN113778391A CN113778391A CN202110117667.XA CN202110117667A CN113778391A CN 113778391 A CN113778391 A CN 113778391A CN 202110117667 A CN202110117667 A CN 202110117667A CN 113778391 A CN113778391 A CN 113778391A
- Authority
- CN
- China
- Prior art keywords
- page
- interaction method
- native application
- target interaction
- management class
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/955—Retrieval from the web using information identifiers, e.g. uniform resource locators [URL]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/957—Browsing optimisation, e.g. caching or content distillation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/34—Graphical or visual programming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/38—Creation or generation of source code for implementing user interfaces
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Human Computer Interaction (AREA)
- Stored Programmes (AREA)
Abstract
本申请实施例提供一种原生应用程序的页面处理方法、装置及设备,原生应用程序的页面为H5页面,原生应用程序加载有管理类,管理类中包括至少一个交互方法,在检测到H5页面打开时,在检测到H5页面打开时,根据管理类将所述至少一个交互方法注册到原生应用程序的视图对象中;通过视图对象监听H5页面的调用消息,并根据监听到的调用消息,执行目标交互方法,以实现H5页面的处理。通过上述过程,使得H5页面和原生应用程序可以直接约定交互方法,H5页面在需要时调用目标交互方法,原生应用程序根据监听到的调用消息执行目标交互方法,避免了现有技术中约定URL容易出错的问题,并能提高代码的可读性和可维护性,提高开发效率。
Description
技术领域
本申请涉及软件编程技术领域,尤其涉及一种原生应用程序的页面处理方法、装置及设备。
背景技术
终端设备可以安装各种各样的应用程序(Application,APP)。随着用户对应用程序的功能需求逐渐多样化,原生应用程序可能无法满足用户需求,因此,很多原生应用程序中集成了超文本标记语言(Hyper Text Markup Language,HTML)5.0页面(简称H5页面),通过H5页面对原生应用程序的功能进行补充。
在H5页面的处理过程中,H5页面通常需要与原生应用程序进行交互。例如,H5页面可能需要向原生应用程序传递一些信息,或者可能需要从原生应用程序获取一些信息。现有技术中,H5页面与原生应用程序的交互方式如下:H5页面和原生应用程序约定好不同的统一资源定位符(Uniform Resource Locator,URL)对应的交互方法。H5页面需要调用原生应用程序的交互方法时,将URL携带在调用消息中发送给原生应用程序。原生应用程序对URL中的特定字符进行判断,确定出需要执行哪个交互方法,并执行该交互方法。
发明人在实现本申请的过程中发现上述现有技术至少存在如下技术问题:在原生应用程序的代码编写时容易出现URL中的个别字符错误,当URL出错时会导致对应的交互方法无法执行,并且该类错误不易排查。另外,当交互方法数量较多时,需要编写冗长的判断语句(例如if-else语句),导致代码可读性和可维护性变差。上述问题均使得开发效率较低。
发明内容
本申请提供一种原生应用程序的页面处理方法、装置及设备,用以提高开发效率。
第一方面,本申请实施例提供一种原生应用程序的页面处理方法,所述页面为超文本标记语言H5页面,所述原生应用程序加载有管理类,所述管理类中包括至少一个交互方法,所述方法包括:
在检测到所述H5页面打开时,根据所述管理类将所述至少一个交互方法注册到所述原生应用程序的视图对象中;
通过所述视图对象监听所述H5页面的调用消息,所述调用消息用于指示调用目标交互方法,所述目标交互方法为所述至少一个交互方法中的一个;
根据监听到的所述调用消息,执行所述目标交互方法,以实现对所述H5页面的处理。
一种可能的实现方式中,所述原生应用程序支持运行时机制,根据所述管理类将所述至少一个交互方法注册到所述原生应用程序的视图对象中,包括:
调用所述运行时机制提供的用于获取类中所有方法的接口,获取所述管理类中的所述至少一个交互方法;
利用循环语句将所述至少一个交互方法分别注册到所述视图对象中。
一种可能的实现方式中,所述管理类包括至少一个分类,每个分类包括一个或者多个所述交互方法,不同分类所包括的所述交互方法的类别不同。
一种可能的实现方式中,所述调用消息包括名称信息和参数信息,所述名称信息用于指示所述目标交互方法的名称,所述参数信息用于指示所述目标交互方法的参数;
根据监听到的所述调用消息,执行所述目标交互方法,包括:
根据所述名称信息和所述参数信息,构建得到所述目标交互方法;
调用用于在运行时动态执行方法的接口,执行所述目标交互方法。
一种可能的实现方式中,所述管理类中的交互方法满足预设声明格式;根据所述名称信息和所述参数信息,构建得到所述目标交互方法,包括:
根据所述名称信息确定所述目标交互方法的名称,并根据所述参数信息确定所述目标交互方法的参数;
按照所述预设声明格式,对所述目标交互方法的名称和所述目标交互方法的参数进行构建,得到所述目标交互方法。
一种可能的实现方式中,若所述调用消息中还包括回传指示信息,则调用用于在运行时动态执行方法的接口,执行所述目标交互方法之后,还包括:
获取所述目标交互方法的返回值,并通过所述视图对象向所述H5页面发送所述目标交互方法的返回值。
一种可能的实现方式中,所述方法还包括:
在检测到所述H5页面关闭时,将所述至少一个交互方法从所述视图对象中删除。
一种可能的实现方式中,所述原生应用程序为基于iOS系统的应用程序,所述视图对象为WKWebView对象。
第二方面,本申请实施例提供一种原生应用程序的页面处理装置,所述页面为超文本标记语言H5页面,所述原生应用程序加载有管理类,所述管理类中包括至少一个交互方法,所述装置包括:
注册模块,用于在检测到所述H5页面打开时,根据所述管理类将所述至少一个交互方法注册到所述原生应用程序的视图对象中;
监听模块,用于通过所述视图对象监听所述H5页面的调用消息,所述调用消息用于指示调用目标交互方法,所述目标交互方法为所述至少一个交互方法中的一个;
处理模块,用于根据监听到的所述调用消息,执行所述目标交互方法,以实现对所述H5页面的处理。
一种可能的实现方式中,所述原生应用程序支持运行时机制,所述注册模块具体用于:
调用所述运行时机制提供的用于获取类中所有方法的接口,获取所述管理类中的所述至少一个交互方法;
利用循环语句将所述至少一个交互方法分别注册到所述视图对象中。
一种可能的实现方式中,所述管理类包括至少一个分类,每个分类包括一个或者多个所述交互方法,不同分类所包括的所述交互方法的类别不同。
一种可能的实现方式中,所述调用消息包括名称信息和参数信息,所述名称信息用于指示所述目标交互方法的名称,所述参数信息用于指示所述目标交互方法的参数;所述处理模块具体用于:
根据所述名称信息和所述参数信息,构建得到所述目标交互方法;
调用用于在运行时动态执行方法的接口,执行所述目标交互方法。
一种可能的实现方式中,所述管理类中的交互方法满足预设声明格式;所述处理模块具体用于:
根据所述名称信息确定所述目标交互方法的名称,并根据所述参数信息确定所述目标交互方法的参数;
按照所述预设声明格式,对所述目标交互方法的名称和所述目标交互方法的参数进行构建,得到所述目标交互方法。
一种可能的实现方式中,若所述调用消息中还包括回传指示信息,则所述处理模块还用于:
获取所述目标交互方法的返回值,并通过所述视图对象向所述H5页面发送所述目标交互方法的返回值。
一种可能的实现方式中,所述注册模块还用于:
在检测到所述H5页面关闭时,将所述至少一个交互方法从所述视图对象中删除。
一种可能的实现方式中,所述原生应用程序为基于iOS系统的应用程序,所述视图对象为WKWebView对象。
第三方面,本申请实施例提供一种电子设备,包括:存储器和处理器,所述存储器用于存储计算机程序,所述处理器运行所述计算机程序实现如第一方面任一项所述的方法。
第四方面,本申请实施例提供一种计算机可读存储介质,包括:计算机程序,所述计算机程序被处理器执行时实现如第一方面任一项所述的方法。
第五方面,本申请实施例提供一种计算机程序产品,包括:计算机程序,所述计算机程序被处理器执行时实现如第一方面任一项所述的方法。
本申请实施例提供的原生应用程序的页面处理方法、装置及设备,原生应用程序的页面为H5页面,原生应用程序加载有管理类,管理类中包括至少一个交互方法,在检测到H5页面打开时,在检测到H5页面打开时,根据管理类将所述至少一个交互方法注册到原生应用程序的视图对象中;通过视图对象监听H5页面的调用消息,并根据监听到的调用消息,执行目标交互方法,以实现H5页面的处理。通过上述过程,使得H5页面和原生应用程序可以直接约定交互方法,H5页面在需要时调用目标交互方法,原生应用程序根据监听到的调用消息执行目标交互方法,避免了现有技术中约定URL容易出错的问题,提高了开发效率;并且,原生应用程序也无须对URL进行冗长的if-else判断,提高了代码的可读性和可维护性,进一步提高了开发效率。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例所涉及的电子设备的软件架构示意图;
图2为本申请实施例提供的一种原生应用程序的页面处理方法的流程示意图;
图3为本申请实施例提供的另一种原生应用程序的页面处理方法的流程示意图;
图4为本申请实施例提供的一种原生应用程序的页面处理装置的结构示意图;
图5为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
首先,对本申请实施例涉及的术语进行解释。
Objective-C:是一种扩充C的面向对象编程语言。
iOS:是苹果公司开发的移动操作系统,采用Objective-C语言编写。
Java:一种面向对象的计算机编程语言。
Android:谷歌公司开发的移动操作系统,中文名安卓。
H5:HTML5是HTML最新的修订版本,由万维网联盟于2014年10月完成标准制定。
原生应用程序是一种用于特定平台或者设备的软件程序。由于原生应用程序是为了在特定设备及其操作系统上使用而创建的,因此,它可以使用设备特定的硬件和软件。原生应用程序使用预先用于设备及其操作系统的代码编写。例如,可以使用Objective-C语言编写iOS应用程序,还可以使用Java语言编写Android应用程序。
随着用户对应用程序的功能需求逐渐多样化,原生应用程序可能无法满足用户需求。因此,很多原生应用程序中集成了H5页面,通过H5页面对原生应用程序的功能进行补充。
本申请实施例的应用场景为原生应用程序与H5页面混合开发的场景。原生应用程序中内置浏览器来加载H5页面,通过H5页面的展示来丰富原生应用程序的内容。并且,利用这种方式,可以不用更新原生应用程序即可展示新的H5页面,因此这种开发方式更加灵活。
图1为本申请实施例所涉及的电子设备的软件架构示意图。本申请实施例中的电子设备可以为手机、平板电脑、手环、智能音箱、智能家居、智能穿戴设备等。电子设备中的操作系统可以为Android操作系统,也可以是iOS操作系统,本申请实施例对此不作限定。
如图1所示,电子设备中安装有应用程序,该应用程序基于操作系统运行。该应用程序可以称为原生应用程序。原生应用程序中内置有浏览器,该浏览器用于承载H5页面。也就是说,H5页面运行在原生应用程序内置的浏览器中。本实施例中,浏览器作为H5页面的容器。
当电子设备为Android操作系统时,上述原生应用程序为Android应用程序,Android应用程序中用于承载H5页面的容器可以为WebView。当电子设备为iOS操作系统时,上述原生应用程序为iOS应用程序,iOS应用程序中用于承载H5页面的容器可以为UIWebView或者WKWebView。
在实际应用场景中,在H5页面的处理过程中,H5页面通常需要与原生应用程序进行交互。例如,H5页面可能需要向原生应用程序传递一些信息,或者可能需要从原生应用程序获取一些信息。现有技术中,H5页面与原生应用程序的交互方式如下:H5页面和原生应用程序约定好不同的统一资源定位符(Uniform Resource Locator,URL)对应的交互方法。H5页面需要调用原生应用程序的交互方法时,使用window.location获取URL,并将URL携带在调用消息中发送给原生应用程序。原生应用程序对URL中的特定字符进行判断,确定出需要执行哪个交互方法,并执行该交互方法。
发明人在实现本申请的过程中发现上述现有技术至少存在如下技术问题:在原生应用程序的代码编写时容易出现URL中的个别字符错误,当URL出错时会导致对应的交互方法无法执行,并且该类错误不易排查。另外,当交互方法数量较多时,需要编写冗长的判断语句(例如if-else语句),导致代码可读性和可维护性变差。上述问题均使得开发效率较低。
本申请实施例提供一种原生应用程序的页面的处理方法、装置及设备,旨在解决上述技术问题中的至少一个。本申请中,原生应用程序的页面为H5页面,原生应用程序加载有管理类,管理类中包括至少一个交互方法,在检测到H5页面打开时,在检测到H5页面打开时,根据管理类将所述至少一个交互方法注册到原生应用程序的视图对象中;通过视图对象监听H5页面的调用消息,并根据监听到的调用消息,执行目标交互方法,以实现H5页面的处理。通过上述过程,使得H5页面和原生应用程序可以直接约定交互方法,H5页面在需要时调用目标交互方法,原生应用程序根据监听到的调用消息执行目标交互方法,避免了现有技术中约定URL容易出错的问题,提高了开发效率;并且,原生应用程序也无须对URL进行冗长的if-else判断,提高了代码的可读性和可维护性,进一步提高了开发效率。
下面以具体地实施例对本申请的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
图2为本申请实施例提供的一种原生应用程序的页面处理方法的流程示意图。本实施例的方法可以由图1中的电子设备执行。电子设备安装有原生应用程序,该原生应用程序的页面为H5页面。更具体的,本实施例的方法可以由电子设备中安装的原生应用程序实现。
本实施例中,原生应用程序加载有管理类,管理类中包括至少一个交互方法。其中,交互方法可以是用于从原生应用程序获取某些数据的方法,或者,是用于向原生应用程序传递某些数据的方法。这些交互方法可供H5页面调用。示例性的,可以在原生应用程序启动过程中,加载所述管理类。
这些交互方法名称和参数可以是原生应用程序的开发人员和H5页面的开发人员事先约定好的。原生应用程序的开发人员编码实现这些交互方法的逻辑,并将这些交互方法维护在管理类中。应理解,通过将这些交互方法维护在管理类中,便于对交互方法进行管理。当需要添加、删除或者修改交互方法时,只需要对管理类进行修改即可,提高了代码的可维护性。由于H5页面的开发人员也知道这些交互方法的名称和参数,因此,在H5页面需要与原生应用程序交互时可以调用这些交互方法。
如图2所示,本实施例的方法,包括:
S201:在检测到H5页面打开时,根据所述管理类将所述至少一个交互方法注册到所述原生应用程序的视图对象中。
本实施例中,原生应用程序内置浏览器,浏览器创建有视图对象。示例性的,原生应用程序可以为基于iOS系统的应用程序,其对应的视图对象可以为WKWebView对象。当然,原生应用程序还可以为基于Android系统的应用程序,其对应的视图对象可以为WebView对象。
需要说明的是,本实施例对于原生应用程序所基于的操作系统,或者,对于原生应用程序所采用的编程语言不作限定。为了描述方便,后续涉及举例时均以iOS应用程序为例进行举例说明。
H5页面承载在浏览器的视图中。当原生应用程序检测到H5页面打开时,或者说,当原生应用程序检测到视图出现时,将管理类中的交互方法注册到视图对象中。示例性的,可以通过-(void)viewWillAppear:方法中将管理类中的交互方法注册到WKWebView中。
通过将交互方法注册到视图对象中,使得视图对象能够监听交互方法的调用情况,当交互方法被H5页面调用时,视图对象能够监听到对应的调用消息。
一些可能的实现方式中,当原生应用程序支持运行时(runtime)机制时,S201中还可以采用运行时机制实现交互方法的注册。
以iOS原生应用程序为例,iOS原生应用程序采用Objective-C语言编写,使得原生应用程序支持运行时机制。原生应用程序在检测到H5页面打开时,可以调用运行时机制提供的用于获取类中所有方法的接口,获取管理类中的所述至少一个交互方法;并利用循环语句将所述至少一个交互方法分别注册到视图对象中。
一个示例中,可以采用runtime提供的class_copyMethodList接口获取管理类中的所有交互方法,然后利用for循环语句或者enumerateObjectsUsingBlock循环语句,将获取到的交互方法分别注册到WKWebView中。
本实施例中,通过将交互方法维护在管理类中,采用运行时机制从管理类中获取所有交互方法,并利用循环语句将获取到的交互方法分别注册到视图对象中,这样,实现了在原生应用程序运行过程中对交互方法进行动态注册,从而,开发人员可以不用了解交互方法的注册过程,在需要对交互方法进行添加、修改、删除操作时,只需要在管理类中对交互方法进行维护即可,提高了代码的可维护性,并提高开发效率。另外,由于多个交互方法的注册过程是利用循环语句实现的,避免了代码中出现较多的重复注册语句(即无需在代码中针对每个交互方法添加注册语句),使得代码更加简洁,提高了代码的可读性,进一步提高开发效率。
S202:通过所述视图对象监听所述H5页面的调用消息,所述调用消息用于指示调用目标交互方法,所述目标交互方法为所述至少一个交互方法中的一个。
其中,目标交互方法为H5页面处理过程中需要调用的交互方法。目标交互方法为管理类所包括的交互方法中的一个。在H5页面处理过程中,当H5页面需要调用目标交互方法时,可以向原生应用程序发送调用消息。由于原生应用程序在视图对象中已注册管理类中的所有交互方法,因此,当H5页面调用目标交互方法时,视图对象可以监听到H5页面的调用消息。
S203:根据监听到的所述调用消息,执行所述目标交互方法,以实现对所述H5页面的处理。
原生应用程序接收到调用消息后,可以执行目标交互方法,通过执行目标交互方法完成对H5页面的处理。
一些可能的实现方式中,本实施例中的管理类可以包括至少一个分类(category)。每个分类包括一个或者多个所述交互方法。每个分类可以是由所述管理类扩展得到的。
具体的,管理类中的交互方法可以被划分为多个类别,本实施例对此类别的划分方式不作限定。例如,可以按照交互方法实现的功能划分,也可以按照其他方式划分。不同分类所包括的交互方法的类别不同。例如,分类1中维护第一类别的交互方法,分类2中维护第二类别的交互方法。
应理解,当管理类包括多个分类的情况下,在通过运行时机制获取管理类中的交互方法时,各个分类中的交互方法也可以一并获取到。
本实施例中,通过对管理类中的交互方法进行分类维护,使得管理类代码的清晰度更高、耦合度更低,提高了代码可维护性,对开发人员来说需求实现变得更加便捷,提高开发效率。
本实施例提供的原生应用程序的页面处理方法中,原生应用程序的页面为H5页面,原生应用程序加载有管理类,管理类中包括至少一个交互方法,在检测到H5页面打开时,在检测到H5页面打开时,根据管理类将所述至少一个交互方法注册到原生应用程序的视图对象中;通过视图对象监听H5页面的调用消息,并根据监听到的调用消息,执行目标交互方法,以实现H5页面的处理。通过上述过程,使得H5页面和原生应用程序可以直接约定交互方法,H5页面在需要时调用目标交互方法,原生应用程序根据监听到的调用消息执行目标交互方法,避免了现有技术中约定URL容易出错的问题,提高了开发效率;并且,原生应用程序也无须对URL进行冗长的if-else判断,提高了代码的可读性和可维护性,进一步提高了开发效率。
在上述任意实施例的基础上,下面结合图3所示的实施例对本申请方案进行更详细的描述。
图3为本申请实施例提供的另一种原生应用程序的页面处理方法的流程示意图。如图3所示,本实施例的方法,包括:
S301:在检测到H5页面打开时,根据所述管理类将所述至少一个交互方法注册到原生应用程序的视图对象中。
应理解,S301的具体实施方式与图2所示实施例中的S201类似,此处不作赘述。
S302:通过视图对象监听所述H5页面的调用消息,所述调用消息包括名称信息和参数信息。
示例性的,可以采用WKWebView协议WKScriptMessageHandler中的userContentController:didReceiveScriptMessage:方法对H5页面的调用消息进行监听。H5页面在调用消息中传递名称信息和参数信息。其中,所述名称信息用于指示所述目标交互方法的名称,所述参数信息用于指示所述目标交互方法的参数。
在视图对象监听到H5页面的调用消息后,在didReceiveScriptMessage方法中实现S303至S305的逻辑。
S303:根据所述名称信息和所述参数信息,构建得到所述目标交互方法。
示例性的,调用消息中携带的名称信息为字符串形式,可以通过NSSelectorFromString()函数将字符串构建为目标交互方法对象。其中,NSSelectorFromString()函数用于根据字符串获取SEL对象,可以将字符串构建为可以直接调用的交互方法。
本实施例中,为了便于对交互方法的构建,可以为管理类中的所有交互方法设计一个通用的声明格式。例如:
-(id)methodName:(NSDictionary*)obj
其中,methodName为交互方法的名称,obj为交互方法的参数,NSDictionary为参数的类型。
上述声明格式可以满足所有类型的交互方法,无论是带有参数或者不带参数,需要返回结果或者不需要返回结果,等。
相应的,可以采用如下方式构建得到目标交互方法:首先,根据所述名称信息确定所述目标交互方法的名称,并根据所述参数信息确定所述目标交互方法的参数,然后,按照所述预设声明格式,对所述目标交互方法的名称和所述目标交互方法的参数进行构建,得到所述目标交互方法。
应理解,通过对管理类中的所有交互方法定义通用的声明格式,一方面便于对管理类中的交互方法进行维护管理,另一方面,使得所有交互方法的构建过程可以统一,无需分别针对每个交互方法分别实现构建逻辑,提高代码可维护性。进一步的,开发人员可以不必了解交互方法的构建逻辑,当需要新增、删除和修改交互方式时,只需要对管理类进行修改和维护,而不需要对交互方法的构建过程进行修改,进一步提高代码可维护性。
S304:调用用于在运行时动态执行方法的接口,执行所述目标交互方法。
示例性的,可以调用如下接口执行目标交互方法:
-(id)performSelector:(SEL)aSelector withObject:(id)object
其中,上述接口用于执行aSelector,并且将object作为aSelector的参数。
一些可能的实现方式中,如果H5页面调用目标交互方法之后需要将目标交互方法的执行结果回传给H5页面,则H5页面可以在调用消息中携带回传指示信息,所述回传指示信息用于指示所述原生应用程序将所述目标交互方法的返回值回传给所述H5页面。该情况下,当原生应用程序执行目标交互方法之后,还可以继续执行S305。
S305:若所述调用消息中还包括回传指示信息,则获取所述目标交互方法的返回值,并通过视图对象向所述H5页面发送所述目标交互方法的返回值。
示例性的,可以通过WKWebView提供的evaluateJavaScript方法将-(id)performSelector:(SEL)aSelector withObject:(id)object的返回值回传给H5页面。其中,evaluateJavaScript为Objective-C中原生调用H5方法的接口。
S306:在检测到所述H5页面关闭时,将所述至少一个交互方法从所述视图对象中删除。
应理解,删除交互方法的过程与注册交互方法的过程类似,可以利用for循环语句或者enumerateObjectsUsingBlock循环语句,将所述至少一个交互方法分别从WKWebView中删除。由于多个交互方法的删除过程是利用循环语句实现的,避免了代码中出现较多的重复删除语句(即无需在代码中针对每个交互方法添加删除语句),使得代码更加简洁,提高了代码的可读性。
本实施例中,通过将交互方法维护在管理类中,利用Objective-C的运行时机制对管理类中的所有交互方法进行统一注册或者统一删除,使得代码更加简洁,提高了代码的可读性和可维护性,提高开发效率。另外,通过利用Objective-C的category分类原理对管理类中的交互方法进行分类维护,使得代码的清晰度更高、耦合度更低,进一步提高了代码的可维护性,进一步提高开发效率。
进一步的,通过对管理类中的目标交互方法设计统一的声明格式,使得在监听到H5页面的调用消息时,可以利用运行时机制根据调用消息构建得到目标交互方法并执行目标交互方法,使得开发人员可以不必需要关心H5页面与原生应用程序的交互过程,而只需要对管理类中的交互方法进行维护即可,降低了开发难度,提高了开发效率。
图4为本申请实施例提供的一种原生应用程序的页面处理装置的结构示意图。本实施例中,原生应用程序的页面为超文本标记语言H5页面,所述原生应用程序加载有管理类,所述管理类中包括至少一个交互方法。
如图4所示,本实施例提供的原生应用程序的页面处理装置400,包括:注册模块401、监听模块402和处理模块403。
其中,注册模块401,用于在检测到所述H5页面打开时,根据所述管理类将所述至少一个交互方法注册到所述原生应用程序的视图对象中;
监听模块402,用于通过所述视图对象监听所述H5页面的调用消息,所述调用消息用于指示调用目标交互方法,所述目标交互方法为所述至少一个交互方法中的一个;
处理模块403,用于根据监听到的所述调用消息,执行所述目标交互方法,以实现对所述H5页面的处理。
一种可能的实现方式中,所述原生应用程序支持运行时机制,所述注册模块401具体用于:
调用所述运行时机制提供的用于获取类中所有方法的接口,获取所述管理类中的所述至少一个交互方法;
利用循环语句将所述至少一个交互方法分别注册到所述视图对象中。
一种可能的实现方式中,所述管理类包括至少一个分类,每个分类包括一个或者多个所述交互方法,不同分类所包括的所述交互方法的类别不同。
一种可能的实现方式中,所述调用消息包括名称信息和参数信息,所述名称信息用于指示所述目标交互方法的名称,所述参数信息用于指示所述目标交互方法的参数;所述处理模块403具体用于:
根据所述名称信息和所述参数信息,构建得到所述目标交互方法;
调用用于在运行时动态执行方法的接口,执行所述目标交互方法。
一种可能的实现方式中,所述管理类中的交互方法满足预设声明格式;所述处理模块403具体用于:
根据所述名称信息确定所述目标交互方法的名称,并根据所述参数信息确定所述目标交互方法的参数;
按照所述预设声明格式,对所述目标交互方法的名称和所述目标交互方法的参数进行构建,得到所述目标交互方法。
一种可能的实现方式中,若所述调用消息中还包括回传指示信息,则所述处理模块403还用于:
获取所述目标交互方法的返回值,并通过所述视图对象向所述H5页面发送所述目标交互方法的返回值。
一种可能的实现方式中,所述注册模块401还用于:
在检测到所述H5页面关闭时,将所述至少一个交互方法从所述视图对象中删除。
一种可能的实现方式中,所述原生应用程序为基于iOS系统的应用程序,所述视图对象为WKWebView对象。
本实施例提供的原生应用程序的页面处理装置,可用于执行上述任一方法实施例中的技术方案,其实现原理和技术效果类似,此处不作赘述。
图5为本申请实施例提供的一种电子设备的结构示意图。该电子设备可以采用如图1所示的软件架构。如图5所示,本实施例提供的电子设备500,包括:处理器501以及存储器502。
其中,存储器502,用于存储计算机程序;处理器501,用于执行存储器中存储的计算机程序,以实现上述实施例中原生应用程序的页面处理方法。具体可以参见前述方法实施例中的相关描述,其实现原理和技术效果类似,本实施例此处不再赘述。
可选地,存储器502既可以是独立的,也可以跟处理器501集成在一起。
当所述存储器502是独立于处理器501之外的器件时,所述电子设备500还可以包括:总线503,用于连接所述存储器502和处理器501。
本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质包括计算机程序,所述计算机程序用于实现如上任一方法实施例中的原生应用程序的页面处理方法,其实现原理和技术效果类似,此处不作赘述。
本申请实施例还提供一种芯片,包括:存储器、处理器以及计算机程序,所述计算机程序存储在所述存储器中,所述处理器运行所述计算机程序执行上述任一方法实施例中的原生应用程序的页面处理方法,其实现原理和技术效果类似,此处不作赘述。
本申请实施例还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现上述任一方法实施例中的原生应用程序的页面处理方法,其实现原理和技术效果类似,此处不作赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能模块可以集成在一个处理单元中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个单元中。上述模块成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能模块的形式实现的集成的模块,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(英文:processor)执行本申请各个实施例所述方法的部分步骤。
应理解,上述处理器可以是中央处理单元(英文:Central Processing Unit,简称:CPU),还可以是其他通用处理器、数字信号处理器(英文:Digital Signal Processor,简称:DSP)、专用集成电路(英文:Application Specific Integrated Circuit,简称:ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合申请所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
存储器可能包含高速RAM存储器,也可能还包括非易失性存储NVM,例如至少一个磁盘存储器,还可以为U盘、移动硬盘、只读存储器、磁盘或光盘等。
总线可以是工业标准体系结构(Industry Standard Architecture,ISA)总线、外部设备互连(Peripheral Component,PCI)总线或扩展工业标准体系结构(ExtendedIndustry Standard Architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,本申请附图中的总线并不限定仅有一根总线或一种类型的总线。
上述存储介质可以是由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。存储介质可以是通用或专用计算机能够存取的任何可用介质。
一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于专用集成电路(Application Specific Integrated Circuits,简称:ASIC)中。当然,处理器和存储介质也可以作为分立组件存在于电子设备或主控设备中。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。
Claims (12)
1.一种原生应用程序的页面处理方法,其特征在于,所述页面为超文本标记语言H5页面,所述原生应用程序加载有管理类,所述管理类中包括至少一个交互方法,所述方法包括:
在检测到所述H5页面打开时,根据所述管理类将所述至少一个交互方法注册到所述原生应用程序的视图对象中;
通过所述视图对象监听所述H5页面的调用消息,所述调用消息用于指示调用目标交互方法,所述目标交互方法为所述至少一个交互方法中的一个;
根据监听到的所述调用消息,执行所述目标交互方法,以实现对所述H5页面的处理。
2.根据权利要求1所述的方法,其特征在于,所述原生应用程序支持运行时机制,根据所述管理类将所述至少一个交互方法注册到所述原生应用程序的视图对象中,包括:
调用所述运行时机制提供的用于获取类中所有方法的接口,获取所述管理类中的所述至少一个交互方法;
利用循环语句将所述至少一个交互方法分别注册到所述视图对象中。
3.根据权利要求2所述的方法,其特征在于,所述管理类包括至少一个分类,每个分类包括一个或者多个所述交互方法,不同分类所包括的所述交互方法的类别不同。
4.根据权利要求1至3任一项所述的方法,其特征在于,所述调用消息包括名称信息和参数信息,所述名称信息用于指示所述目标交互方法的名称,所述参数信息用于指示所述目标交互方法的参数;
根据监听到的所述调用消息,执行所述目标交互方法,包括:
根据所述名称信息和所述参数信息,构建得到所述目标交互方法;
调用用于在运行时动态执行方法的接口,执行所述目标交互方法。
5.根据权利要求4所述的方法,其特征在于,所述管理类中的交互方法满足预设声明格式;根据所述名称信息和所述参数信息,构建得到所述目标交互方法,包括:
根据所述名称信息确定所述目标交互方法的名称,并根据所述参数信息确定所述目标交互方法的参数;
按照所述预设声明格式,对所述目标交互方法的名称和所述目标交互方法的参数进行构建,得到所述目标交互方法。
6.根据权利要求4所述的方法,其特征在于,若所述调用消息中还包括回传指示信息,则调用用于在运行时动态执行方法的接口,执行所述目标交互方法之后,还包括:
获取所述目标交互方法的返回值,并通过所述视图对象向所述H5页面发送所述目标交互方法的返回值。
7.根据权利要求1至3任一项所述的方法,其特征在于,所述方法还包括:
在检测到所述H5页面关闭时,将所述至少一个交互方法从所述视图对象中删除。
8.根据权利要求1至3任一项所述的方法,其特征在于,所述原生应用程序为基于iOS系统的应用程序,所述视图对象为WKWebView对象。
9.一种原生应用程序的页面处理装置,其特征在于,所述页面为超文本标记语言H5页面,所述原生应用程序加载有管理类,所述管理类中包括至少一个交互方法,所述装置包括:
注册模块,用于在检测到所述H5页面打开时,根据所述管理类将所述至少一个交互方法注册到所述原生应用程序的视图对象中;
监听模块,用于通过所述视图对象监听所述H5页面的调用消息,所述调用消息用于指示调用目标交互方法,所述目标交互方法为所述至少一个交互方法中的一个;
处理模块,用于根据监听到的所述调用消息,执行所述目标交互方法,以实现对所述H5页面的处理。
10.一种电子设备,其特征在于,包括:存储器和处理器,所述存储器用于存储计算机程序,所述处理器运行所述计算机程序实现如权利要求1至8任一项所述的方法。
11.一种计算机可读存储介质,其特征在于,包括:计算机程序,所述计算机程序被处理器执行时实现如权利要求1至8任一项所述的方法。
12.一种计算机程序产品,其特征在于,包括:计算机程序,所述计算机程序被处理器执行时实现如权利要求1至8任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110117667.XA CN113778391A (zh) | 2021-01-28 | 2021-01-28 | 原生应用程序的页面处理方法、装置及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110117667.XA CN113778391A (zh) | 2021-01-28 | 2021-01-28 | 原生应用程序的页面处理方法、装置及设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113778391A true CN113778391A (zh) | 2021-12-10 |
Family
ID=78835520
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110117667.XA Pending CN113778391A (zh) | 2021-01-28 | 2021-01-28 | 原生应用程序的页面处理方法、装置及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113778391A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114327466A (zh) * | 2022-01-30 | 2022-04-12 | 重庆长安汽车股份有限公司 | 一种车载app模块间消息解耦的实现方法及系统 |
CN114356477A (zh) * | 2021-12-22 | 2022-04-15 | 青岛海信移动通信技术股份有限公司 | 一种终端设备和应用程序调用方法 |
CN115017436A (zh) * | 2022-08-05 | 2022-09-06 | 太平金融科技服务(上海)有限公司深圳分公司 | 应用程序的数据交互方法、装置、计算机设备和存储介质 |
CN114327466B (zh) * | 2022-01-30 | 2024-05-17 | 重庆长安汽车股份有限公司 | 一种车载app模块间消息解耦的实现方法及系统 |
-
2021
- 2021-01-28 CN CN202110117667.XA patent/CN113778391A/zh active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114356477A (zh) * | 2021-12-22 | 2022-04-15 | 青岛海信移动通信技术股份有限公司 | 一种终端设备和应用程序调用方法 |
CN114356477B (zh) * | 2021-12-22 | 2024-04-09 | 青岛海信移动通信技术有限公司 | 一种终端设备和应用程序调用方法 |
CN114327466A (zh) * | 2022-01-30 | 2022-04-12 | 重庆长安汽车股份有限公司 | 一种车载app模块间消息解耦的实现方法及系统 |
CN114327466B (zh) * | 2022-01-30 | 2024-05-17 | 重庆长安汽车股份有限公司 | 一种车载app模块间消息解耦的实现方法及系统 |
CN115017436A (zh) * | 2022-08-05 | 2022-09-06 | 太平金融科技服务(上海)有限公司深圳分公司 | 应用程序的数据交互方法、装置、计算机设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9959198B1 (en) | Simulated testing of API | |
CN109495584B (zh) | 物联网设备接入方法、装置、设备及介质 | |
US10191751B2 (en) | Information processing device for generating application programming interface information | |
CN111427596B (zh) | 一种软件升级的方法、装置及终端设备 | |
CN107729452B (zh) | 网页加载方法、装置、电子设备及计算机可读存储介质 | |
CN113778391A (zh) | 原生应用程序的页面处理方法、装置及设备 | |
EP4280048A1 (en) | Page rendering method and apparatus, electronic device, computer-readable storage medium, and computer program product | |
CN111444103A (zh) | 一种Web页面自动化测试方法及相关设备 | |
CN111399840A (zh) | 一种模块开发方法及装置 | |
CN113268260A (zh) | 用于web前端的路由方法及装置 | |
CN111444453A (zh) | 页面回传数据处理方法及其装置 | |
CN114048415A (zh) | 表单生成方法及装置、电子设备和计算机可读存储介质 | |
CN114661375A (zh) | 应用集成方法及装置 | |
CN110083355B (zh) | 一种app页面的处理方法及装置 | |
CN107341038B (zh) | 兼容性处理方法、装置及电子设备 | |
CN108037914B (zh) | 一种安卓原生系统结合js开发的方法及装置 | |
CN112631949B (zh) | 一种调试方法、装置、计算机设备及存储介质 | |
CN114356290A (zh) | 一种数据处理方法、装置及计算机可读存储介质 | |
CN111142735B (zh) | 一种软件页面的创建方法、装置、终端设备和存储介质 | |
CN106775608B (zh) | 独立系统进程的实现方法和装置 | |
CN114461223A (zh) | 一种代码生成方法、装置及终端设备 | |
CN112764729A (zh) | 应用软件开发方法、装置、计算机设备及可读存储介质 | |
CN107357926B (zh) | 网页处理方法、装置及电子设备 | |
CN110597536A (zh) | 一种软件升级方法、系统及终端设备 | |
CN112580086A (zh) | 配置文件的访问保护方法、装置、设备以及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |