发明内容
本申请的主要目的在于提供一种用于客户端应用程序的离线访问方法以及装置,以解决应用程序的客户端内访问由于网络延迟造成用户体验不佳的问题。
为了实现上述目的,根据本申请的一个方面,提供了一种用于客户端应用程序的离线访问方法,用于在应用程序端内自动离线化访问,。
根据本申请的用于客户端应用程序的离线访问方法包括:判断通过应用程序访问预设H5项目链接时,是否检测到预先增设的可离线参数;如果判断通过应用程序访问预设链接时检测到预先增设的可离线参数,则读取配置文件;根据所述配置文件,下载离线资源至客户端;当检测用户在所述应用程序内访问所述H5项目链接时,通过所述应用程序拦截请求并返回在所述客户端的本地对应的静态文件,以使在应用程序端内自动离线化访问。
进一步地,判断通过应用程序访问预设H5项目链接时,是否检测到预先增设的可离线参数之后,还包括:
如果判断通过应用程序访问预设链接时没有检测到预先增设的可离线参数,则通过统一资源定位符远程链接后加载资源,并通过JSBridge访问客户端应用程序中的专有资源。
进一步地,判断通过应用程序访问预设H5链项目接时,是否检测到预先增设的可离线参数之后,还包括:
通过预设公共脚本库判断当前环境是属于应用程序还是第三方环境访问预设链接;
如果通过预设公共脚本库判断当前环境是属于应用程序之内,则访问所有jsBridge资源;
如果通过预设公共脚本库判断当前环境是第三方环境,则对jsBridge的访问返回一个无损页面交互的兼容结果。
进一步地,当检测用户在所述应用程序内访问所述H5项目链接时,通过所述应用程序拦截请求并返回在所述客户端的本地对应的静态文件,以使在应用程序端内自动离线化访问时还包括:跨域资源数据请求的步骤,
所述跨域资源数据请求的步骤包括:
所述应用程序内离线访问时,将ajax请求通过jsBridge代理到客户端;
根据所述客户端请求数据源获取数据,回传至当前访问的H5页面。
进一步地,当检测用户在所述应用程序内访问所述H5项目链接时,通过所述应用程序拦截请求并返回在所述客户端的本地对应的静态文件,以使在应用程序端内自动离线化访问时还包括:应用程序内离线静态资源差量更新的步骤,
所述应用程序内离线静态资源差量更新的步骤包括:
当客户端应用程序以离线方式访问时,静默拉取最新静态资源映射表的配置文件;
下载成功后将最新配置文件和本地已经缓存过的配置文件进行比较,根据比较结果下载、删除或缓存静态资源。
为了实现上述目的,根据本申请的另一方面,提供了一种用于客户端应用程序的离线访问装置,用于在应用程序端内自动离线化访问。
根据本申请的用于客户端应用程序的离线访问装置包括:判断模块,用于判断通过应用程序访问预设H5项目链接时,是否检测到预先增设的可离线参数;读取模块,用于如果判断通过应用程序访问预设链接时检测到预先增设的可离线参数,则读取配置文件;下载模块,用于根据所述配置文件,下载离线资源至客户端;离线化模块,用于当检测用户在所述应用程序内访问所述H5项目链接时,通过所述应用程序拦截请求并返回在所述客户端的本地对应的静态文件,以使在应用程序端内自动离线化访问。
进一步地,装置还包括:第一访问模块,用于
如果判断通过应用程序访问预设链接时没有检测到预先增设的可离线参数,则通过统一资源定位符远程链接后加载资源,并通过JSBridge访问客户端应用程序中的专有资源。
进一步地,装置还包括:第二访问模块,用于
通过预设公共脚本库判断当前环境是属于应用程序还是第三方环境访问预设链接;
如果通过预设公共脚本库判断当前环境是属于应用程序之内,则访问所有jsBridge资源;
如果通过预设公共脚本库判断当前环境是第三方环境,则对jsBridge的访问返回一个无损页面交互的兼容结果。
进一步地,所述离线化模块,还用于执行跨域资源数据请求的步骤,
所述跨域资源数据请求的步骤包括:
所述应用程序内离线访问时,将ajax请求通过jsBridge代理到客户端;
根据所述客户端请求数据源获取数据,回传至当前访问的H5页面。
进一步地,所述离线化模块,还用于执行应用程序内离线静态资源差量更新的步骤,
所述应用程序内离线静态资源差量更新的步骤包括:
当客户端应用程序以离线方式访问时,静默拉取最新静态资源映射表的配置文件;
下载成功后将最新配置文件和本地已经缓存过的配置文件进行比较,根据比较结果下载、删除或缓存静态资源。
在本申请实施例中用于客户端应用程序的离线访问方法以及装置,采用判断通过应用程序访问预设H5项目链接时,是否检测到预先增设的可离线参数的方式,如果判断通过应用程序访问预设链接时检测到预先增设的可离线参数,则读取配置文件,通过根据所述配置文件,下载离线资源至客户端,达到了当检测用户在所述应用程序内访问所述H5项目链接时,通过所述应用程序拦截请求并返回在所述客户端的本地对应的静态文件,以使在应用程序端内自动离线化访问的目的,从而实现了应用程序端内自动离线化访问的技术效果,进而解决了应用程序的客户端内访问由于网络延迟造成用户体验不佳的技术问题。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
在本申请中,术语“上”、“下”、“左”、“右”、“前”、“后”、“顶”、“底”、“内”、“外”、“中”、“竖直”、“水平”、“横向”、“纵向”等指示的方位或位置关系为基于附图所示的方位或位置关系。这些术语主要是为了更好地描述本申请及其实施例,并非用于限定所指示的装置、元件或组成部分必须具有特定方位,或以特定方位进行构造和操作。
并且,上述部分术语除了可以用于表示方位或位置关系以外,还可能用于表示其他含义,例如术语“上”在某些情况下也可能用于表示某种依附关系或连接关系。对于本领域普通技术人员而言,可以根据具体情况理解这些术语在本申请中的具体含义。
此外,术语“安装”、“设置”、“设有”、“连接”、“相连”、“套接”应做广义理解。例如,可以是固定连接,可拆卸连接,或整体式构造;可以是机械连接,或电连接;可以是直接相连,或者是通过中间媒介间接相连,又或者是两个装置、元件或组成部分之间内部的连通。对于本领域普通技术人员而言,可以根据具体情况理解上述术语在本申请中的具体含义。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
本申请实现了一种应用程序内访问时可离线且离线资源可差量更新的离线方案,可以实现子啊应用程序内离线模式访问时的几乎零加载延迟。
如图1所示,该方法包括如下的步骤S102至步骤S108:
步骤S102,判断通过应用程序访问预设H5项目链接时,是否检测到预先增设的可离线参数;
在应用程序端判断通过应用程序访问预设H5项目链接时,是否检测到预先增设的可离线参数。所述预先增设的可离线参数需要预先进行配置。
步骤S104,如果判断通过应用程序访问预设链接时检测到预先增设的可离线参数,则读取配置文件;
在应用程序端如果判断通过应用程序访问预设链接时检测到预先增设的可离线参数时,可以开始读取配置文件。说明此项目可离线。
步骤S106,根据所述配置文件,下载离线资源至客户端;
根据所述配置文件,开始进行下载离线资源至客户端,等待调用。
步骤S108,当检测用户在所述应用程序内访问所述H5项目链接时,通过所述应用程序拦截请求并返回在所述客户端的本地对应的静态文件,以使在应用程序端内自动离线化访问。
当检测所述用户在所述应用程序内访问所述H5项目链接时,通过所述应用程序拦截请求并返回在所述客户端的本地对应的所述静态文件,从而在应用程序端内自动离线化访问。
具体地,通过运营后台配置H5项目入口链接如https://example.com时,添加项目可离线参数如https://example.com?offline=true。应用程序首次读取URL,检测到offline=true,说明此项目可离线,读取项目根目录下的manifest.json配置文件,按照配置文件中的文件和目录结构将所有离线资源下载到客户端。当用户在应用程序内访问此H5时,应用程序拦截到请求,返回本地对应的静态文件,达到自动化离线访问效果。
从以上的描述中,可以看出,本申请实现了如下技术效果:
在本申请实施例中,采用判断通过应用程序访问预设H5项目链接时,是否检测到预先增设的可离线参数的方式,如果判断通过应用程序访问预设链接时检测到预先增设的可离线参数,则读取配置文件,通过根据所述配置文件,下载离线资源至客户端,达到了当检测用户在所述应用程序内访问所述H5项目链接时,通过所述应用程序拦截请求并返回在所述客户端的本地对应的静态文件,以使在应用程序端内自动离线化访问的目的,从而实现了应用程序端内自动离线化访问的技术效果,进而解决了应用程序的客户端内访问由于网络延迟造成用户体验不佳的技术问题。
根据本申请实施例,作为本实施例中的优选,如图2所示,判断通过应用程序访问预设H5项目链接时,是否检测到预先增设的可离线参数之后,还包括:
步骤S202,如果判断通过应用程序访问预设链接时没有检测到预先增设的可离线参数,则通过统一资源定位符远程链接后加载资源,并通过JSBridge访问客户端应用程序中的专有资源。
具体地,应用程序内访问时,若offline=false或offline参数不存在,直接访问URL远程链接并加载资源,并通过jsBridge访问客户端应用程序专有资源。
根据本申请实施例,作为本实施例中的优选,如图3所示,判断通过应用程序访问预设H5链项目接时,是否检测到预先增设的可离线参数之后,还包括:
步骤S302,通过预设公共脚本库判断当前环境是属于应用程序还是第三方环境访问预设链接;
步骤S304,如果通过预设公共脚本库判断当前环境是属于应用程序之内,则访问所有jsBridge资源;
步骤S306,如果通过预设公共脚本库判断当前环境是第三方环境,则对jsBridge的访问返回一个无损页面交互的兼容结果。
具体地,第三方浏览器访问时,由于此H5可能含有通过jsBridge访问的APP资源:如登录态,设备API等,而这些资源在第三方是无法访问的。为了消除不同环境的差异,提供了一个公共JS库,通过判断当前环境是属于应用程序还是第三方环境,如果是应用程序之内,可以访问所有jsBridge资源,如果是应用程序之外第三方浏览器,则对jsBridge的访问返回一个无损页面交互的兼容结果。
比如,当访问用户登录态时,会弹出一个H5专用的登录框提示用户登录;当访问原生专有资源时,返回弹出toast提示等。
根据本申请实施例,作为本实施例中的优选,如图4所示,当检测用户在所述应用程序内访问所述H5项目链接时,通过所述应用程序拦截请求并返回在所述客户端的本地对应的静态文件,以使在应用程序端内自动离线化访问时还包括:跨域资源数据请求的步骤,
所述跨域资源数据请求的步骤包括:
步骤S402,所述应用程序内离线访问时,将ajax请求通过jsBridge代理到客户端;
步骤S404,根据所述客户端请求数据源获取数据,回传至当前访问的H5页面。
具体地,离线访问时实现跨域资源数据请求时包括:应用程序之内离线访问时,所有的ajax请求都通过jsBridge代理到客户端,由客户端请求数据源获取数据,然后回传给H5页面,这个过程封装在公共JS库之内。
根据本申请实施例,作为本实施例中的优选,如图5所示,当检测用户在所述应用程序内访问所述H5项目链接时,通过所述应用程序拦截请求并返回在所述客户端的本地对应的静态文件,以使在应用程序端内自动离线化访问时还包括:应用程序内离线静态资源差量更新的步骤,
所述应用程序内离线静态资源差量更新的步骤包括:
步骤S502,当客户端应用程序以离线方式访问时,静默拉取最新静态资源映射表的配置文件;
步骤S504,下载成功后将最新配置文件和本地已经缓存过的配置文件进行比较,根据比较结果下载、删除或缓存静态资源。
具体地,应用程序内的离线静态资源按照如下方式实现差量更新。在开发构建时,每次重新构建都会重新生成manifest.json配置文件,该配置文件是一个静态资源映射表,除了对应资源的相对路径,还有该资源的内容Hash。
当客户端应用程序以离线方式访问时,每次重新进入项目入口后,静默拉取最新manifest.json,下载成功后将最新配置文件和本地已经缓存过的manifest.json做对比得出:
(1)文件存在但Hash不一样的:客户端应用程序进行重新下载并缓存。
(2)本地存在但服务器不存在的:客户端应用程序删除本地缓存。
(3)本地不存在,但服务器存在的:客户端应用程序全新下载并缓存。
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
根据本申请实施例,还提供了一种用于实施上述用于客户端应用程序的离线访问方法的装置,用于在应用程序端内自动离线化访问,如图6所示,该装置包括:判断模块10,用于判断通过应用程序访问预设H5项目链接时,是否检测到预先增设的可离线参数;读取模块20,用于如果判断通过应用程序访问预设链接时检测到预先增设的可离线参数,则读取配置文件;下载模块30,用于根据所述配置文件,下载离线资源至客户端;离线化模块40,用于当检测用户在所述应用程序内访问所述H5项目链接时,通过所述应用程序拦截请求并返回在所述客户端的本地对应的静态文件,以使在应用程序端内自动离线化访问。
在本申请实施例的判断模块10中在应用程序端判断通过应用程序访问预设H5项目链接时,是否检测到预先增设的可离线参数。所述预先增设的可离线参数需要预先进行配置。
在本申请实施例的读取模块20中在应用程序端如果判断通过应用程序访问预设链接时检测到预先增设的可离线参数时,可以开始读取配置文件。说明此项目可离线。
在本申请实施例的下载模块30中根据所述配置文件,开始进行下载离线资源至客户端,等待调用。
在本申请实施例的离线化模块40中当检测所述用户在所述应用程序内访问所述H5项目链接时,通过所述应用程序拦截请求并返回在所述客户端的本地对应的所述静态文件,从而在应用程序端内自动离线化访问。
在上述模块中具体地,通过运营后台配置H5项目入口链接如https://example.com时,添加项目可离线参数如https://example.com?offline=true。应用程序首次读取URL,检测到offline=true,说明此项目可离线,读取项目根目录下的manifest.json配置文件,按照配置文件中的文件和目录结构将所有离线资源下载到客户端。当用户在应用程序内访问此H5时,应用程序拦截到请求,返回本地对应的静态文件,达到自动化离线访问效果。
根据本申请实施例,作为本实施例中的优选,如图7所示,还包括:第一访问模块50,用于如果判断通过应用程序访问预设链接时没有检测到预先增设的可离线参数,则通过统一资源定位符远程链接后加载资源,并通过JSBridge访问客户端应用程序中的专有资源。
具体地,应用程序内访问时,若offline=false或offline参数不存在,直接访问URL远程链接并加载资源,并通过jsBridge访问客户端应用程序专有资源。
根据本申请实施例,作为本实施例中的优选,如图7所示,还包括:第二访问模块60,用于通过预设公共脚本库判断当前环境是属于应用程序还是第三方环境访问预设链接;如果通过预设公共脚本库判断当前环境是属于应用程序之内,则访问所有jsBridge资源;如果通过预设公共脚本库判断当前环境是第三方环境,则对jsBridge的访问返回一个无损页面交互的兼容结果。
具体地,第三方浏览器访问时,由于此H5可能含有通过jsBridge访问的APP资源:如登录态,设备API等,而这些资源在第三方是无法访问的。为了消除不同环境的差异,提供了一个公共JS库,通过判断当前环境是属于应用程序还是第三方环境,如果是应用程序之内,可以访问所有jsBridge资源,如果是应用程序之外第三方浏览器,则对jsBridge的访问返回一个无损页面交互的兼容结果。
比如,当访问用户登录态时,会弹出一个H5专用的登录框提示用户登录;当访问原生专有资源时,返回弹出toast提示等。
根据本申请实施例,作为本实施例中的优选,所述离线化模块,还用于执行跨域资源数据请求的步骤,所述跨域资源数据请求的步骤包括:所述应用程序内离线访问时,将ajax请求通过jsBridge代理到客户端;根据所述客户端请求数据源获取数据,回传至当前访问的H5页面。
具体地,离线访问时实现跨域资源数据请求时包括:应用程序之内离线访问时,所有的ajax请求都通过jsBridge代理到客户端,由客户端请求数据源获取数据,然后回传给H5页面,这个过程封装在公共JS库之内。
根据本申请实施例,作为本实施例中的优选,所述离线化模块,还用于执行应用程序内离线静态资源差量更新的步骤,所述应用程序内离线静态资源差量更新的步骤包括:当客户端应用程序以离线方式访问时,静默拉取最新静态资源映射表的配置文件;下载成功后将最新配置文件和本地已经缓存过的配置文件进行比较,根据比较结果下载、删除或缓存静态资源。
具体地,应用程序内的离线静态资源按照如下方式实现差量更新。在开发构建时,每次重新构建都会重新生成manifest.json配置文件,该配置文件是一个静态资源映射表,除了对应资源的相对路径,还有该资源的内容Hash。
当客户端应用程序以离线方式访问时,每次重新进入项目入口后,静默拉取最新manifest.json,下载成功后将最新配置文件和本地已经缓存过的manifest.json做对比得出:
(1)文件存在但Hash不一样的:客户端应用程序进行重新下载并缓存。
(2)本地存在但服务器不存在的:客户端应用程序删除本地缓存。
(3)本地不存在,但服务器存在的:客户端应用程序全新下载并缓存。
显然,本领域的技术人员应该明白,上述的本申请的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请不限制于任何特定的硬件和软件结合。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。