浏览器扩展接口的调用方法、装置、终端及存储介质与流程

文档序号:25543483发布日期:2021-06-18 20:40阅读:176来源:国知局
浏览器扩展接口的调用方法、装置、终端及存储介质与流程

本申请涉及互联网技术领域,具体涉及浏览器技术领域,尤其涉及一种浏览器扩展接口的调用方法、一种浏览器扩展接口的调用装置、一种终端及一种计算机存储介质。



背景技术:

chromium浏览器扩展接口是chromium提供的一组特殊的javascript调用接口。基于该机制,浏览器可以定制自己的扩展接口。

目前是直接使用chromium浏览器扩展接口,在浏览器内核层处理javascript代码调用。如图1所示的chromium浏览器的进程架构示意图,其中,browser进程作为主进程,实现用户界面(userinterface,ui)逻辑(包括标签、书签等相关ui逻辑)、数据管理等功能;同时也管理着各网页的渲染(render)进程、扩展进程、gpu进程、以及其他进程。然而,直接使用chromium浏览器扩展接口,每次添加或修改接口,都需要重新编译内核,降低了开发效率。

本申请涉及的浏览器采用“壳核分离”的架构,如图2所示,把ui(包括ui逻辑和ui库)与内核进行分离。新增了一个ui进程,把主界面相关的ui逻辑移植到了ui进程中。修改后,ui进程为主进程,并由ui进程控制browser进程的生命周期。ui进程与browser进程之间通过跨进程通信(inter-processcommunication,ipc)进行通信,主要是数据的传递。这种新的进程架构,没有改变chromium原有的进程架构,只在browser进程中裁剪了部分代码,并新增加了跨进程通信模块。

在这种“壳核分离”的浏览器架构下,一些javascript调用逻辑依赖于控件(frame)层,如果内核版本和frame版本不匹配,则可能导致调用失败。

因此,需要解决在“壳核分离”的浏览器架构下,如何进行扩展接口的调用,提高开发效率,避免内核版本和frame版本不一致的问题。



技术实现要素:

本申请实施例提供了一种浏览器扩展接口的调用方法、装置、终端及存储介质。

第一方面,提供了一种浏览器扩展接口的调用方法,包括:

浏览器扩展接口向浏览器内核层发送第一调用请求,所述第一调用请求包括调用命令和命令参数;

所述浏览器内核层转发所述第一调用请求给浏览器控件层;

所述浏览器控件层解析所述命令参数,使用所述命令参数执行所述调用命令,并且向所述浏览器内核层发送所述调用结果;

所述浏览器内核层向所述浏览器扩展接口转发所述调用结果。

在一个实现中,所述方法还包括:

所述浏览器扩展接口通过第一接口向所述浏览器内核层发送检查指令,所述检查指令用于指示检查所述浏览器控件层是否支持使用所述命令参数执行所述调用命令。

在又一个实现中,所述浏览器扩展接口向浏览器内核层发送第一调用请求,包括:

若所述浏览器控件层支持使用所述命令参数执行所述调用命令,所述浏览器扩展接口通过第二接口向所述浏览器内核层发送所述调用命令。

在又一个实现中,所述浏览器内核层接收到的所述第一调用请求包括回调函数;所述浏览器内核层转发所述第一调用请求给浏览器控件层,包括:

所述浏览器内核层通过进程间通信转发所述第一调用请求给浏览器控件层,所述转发的第一调用请求还包括第一标识,所述第一标识关联所述回调函数;

所述浏览器控件层向所述浏览器内核层发送所述调用结果,包括:

所述浏览器控件层通过进程间通信向所述浏览器内核层发送所述调用结果,所述调用结果还包括所述第一标识。

在又一个实现中,所述第一调用请求为与所述浏览器控件层关联的调用请求。

在又一个实现中,所述调用命令为打开对话框,所述命令参数为打开“导入书签”面板。

在又一个实现中,所述方法还包括:

所述浏览器扩展接口向所述浏览器内核层发送第二调用请求,其中,所述第二调用请求包括调用命令和命令参数,所述第二调用请求为与所述浏览器内核层关联的调用请求;

所述浏览器内核层解析所述命令参数,使用所述命令参数执行所述调用命令,并且向所述浏览器扩展接口发送调用结果。

第二方面,提供了一种浏览器扩展接口的调用装置,包括:浏览器扩展接口、浏览器内核层和浏览器控件层;

所述浏览器扩展接口用于向浏览器内核层发送第一调用请求,所述第一调用请求包括调用命令和命令参数;

所述浏览器内核层用于转发所述第一调用请求给浏览器控件层;

所述浏览器控件层用于解析所述命令参数,使用所述命令参数执行所述调用命令,并且向所述浏览器内核层发送所述调用结果;

所述浏览器内核层还用于向所述浏览器扩展接口转发所述调用结果。

在一个实现中,所述浏览器扩展接口用于通过第一接口向所述浏览器内核层发送检查指令,所述检查指令用于指示检查所述浏览器控件层是否支持使用所述命令参数执行所述调用命令。

在又一个实现中,所述浏览器扩展接口用于若所述浏览器控件层支持使用所述命令参数执行所述调用命令,通过第二接口向所述浏览器内核层发送所述调用命令。

在又一个实现中,所述浏览器内核层接收到的所述第一调用请求包括回调函数;

所述浏览器内核层用于通过进程间通信转发所述第一调用请求给浏览器控件层,所述转发的第一调用请求还包括第一标识,所述第一标识关联所述回调函数;

所述浏览器控件层用于通过进程间通信向所述浏览器内核层发送所述调用结果,所述调用结果还包括所述第一标识。

在又一个实现中,所述第一调用请求为与所述浏览器控件层关联的调用请求。

在又一个实现中,所述调用命令为打开对话框,所述命令参数为打开“导入书签”面板。

在又一个实现中,所述浏览器扩展接口还用于向所述浏览器内核层发送第二调用请求,其中,所述第二调用请求包括调用命令和命令参数,所述第二调用请求为与所述浏览器内核层关联的调用请求;

所述浏览器内核层还用于解析所述命令参数,使用所述命令参数执行所述调用命令,并且向所述浏览器扩展接口发送调用结果。

第三方面,提供了一种终端,包括输入设备和输出设备,还包括:

处理器,适于实现一条或多条指令;以及,

存储器,所述存储器存储有一条或多条指令,所述一条或多条指令适于由所述处理器加载并执行如第一方面或第一方面的任一个实现所述的浏览器扩展接口的调用方法。

第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有一条或多条指令,所述一条或多条指令适于由处理器加载并执行如第一方面或第一方面的任一个实现所述的浏览器扩展接口的调用方法。

采用本申请的技术方案,具有如下有益效果:

在扩展接口调用命令要由浏览器控件层执行时,浏览器内核层对调用请求不作处理,仅转发调用请求和调用结果,从而无需浏览器内核层重新编译内核,提高了开发效率,且由浏览器控件层执行调用命令,使得调用命令依赖于控件版本,而不依赖于内核版本。

附图说明

图1为chromium浏览器的架构示意图;

图2为本申请涉及的壳核分离的浏览器架构示意图;

图3为本申请实施例提供的一种浏览器扩展接口的调用方法的流程示意图;

图4为本申请实施例提供的又一种浏览器扩展接口的调用方法的流程示意图;

图5为现有的浏览器扩展接口的调用方法的流程示意图;

图6为命令参数为“一键导入书签”的控件入口示意图;

图7为点击“一键导入书签”控件后打开的控件示意图;

图8为若检测到当前的浏览器版本不支持“一键导入书签”时,控件弹出提示示意图;

图9为本申请实施例提供的一种浏览器扩展接口的调用装置的结构示意图;

图10为本申请实施例提供的一种终端的结构示意图。

具体实施方式

本申请实施例采用如图2所示的“壳核分离”的浏览器架构,ui进程作为主进程,控制browser进程的生命周期。ui进程与browser进程之间通过ipc进行通信,主要是数据的传递。ui进程包括ui逻辑和ui库。browser进程管理各网页的渲染进程、扩展进程、gpu进程以及其他进程。

本申请可以基于该浏览器架构,添加或修改javascript扩展接口。该javascript扩展接口可以是根据需要定制的。

如图3所示,为本申请实施例提供的一种浏览器扩展接口的调用方法的流程示意图,该方法可以包括:

s101、浏览器扩展接口向浏览器内核层发送第一调用请求,第一调用请求包括调用命令和命令参数。

本申请的浏览器扩展接口(以下简称“扩展接口”)具体可以是一种javascript扩展接口。

当用户触发扩展接口调用,或终端内部定时器触发扩展接口调用时,扩展接口向浏览器内核层发送第一调用请求。该第一调用请求包括调用命令(cmd)和命令参数(args)。其中,cmd表示扩展接口调用的命令名称(例如opendialog(打开对话框));args表示扩展接口调用的命令参数(例如{dialogname:‘importbookmark’(打开“导入书签”面板)})。

本申请基于壳核分离的架构,在浏览器内核层(以下简称“内核层”)提供一个chrome.framecommand接口,扩展接口通过上述接口向内核层发送上述第一调用请求。

s102、浏览器内核层转发第一调用请求给浏览器控件层。

该第一调用请求是与控件层关联的调用请求,其调用逻辑依赖于控件层。因此,内核层不对第一调用请求进行处理,无需重新编译内核,将第一调用请求转发给控件层。

具体地,浏览器内核层通过ipc转发上述第一调用请求给浏览器控件层。当然,浏览器内核层与浏览器控件层之间不限于ipc通信方式。

s103、浏览器控件层解析命令参数,使用命令参数执行调用命令。

控件层接收到第一调用请求,解析第一调用请求,获取其中的调用命令和命令参数。并使用命令参数执行调用命令。

如上面的示例,调用命令为“打开对话框”,命令参数为“打开‘导入书签’面板”,则控件层打开对话框,调用打开“导入书签”的面板。

s104、浏览器控件层向浏览器内核层发送调用结果。

控件层执行上述调用命令后,向内核层发送调用结果。

具体地,浏览器控件层通过ipc向浏览器内核层发送调用结果。当然,浏览器内核层与浏览器控件层之间不限于ipc通信方式。

s105、浏览器内核层向浏览器扩展接口转发调用结果。

内核层不对调用结果进行处理,转发调用结果给扩展接口。扩展接口获取了调用结果后,可以获知控件层执行了上述调用请求。

在使用了本方案后,例如,对于新手引导页面添加“一键导入书签”按钮的需求,在浏览器客户端部分的开发成本从原来的2天,降到了0.5天(每天按照8小时计算),极大降低了开发成本。

根据本申请实施例提供的一种浏览器扩展接口的调用方法,在扩展接口调用命令要由浏览器控件层执行时,浏览器内核层对调用请求不作处理,仅转发调用请求和调用结果,从而无需浏览器内核层重新编译内核,提高了开发效率,且由浏览器控件层执行调用命令,使得调用命令依赖于控件版本,而不依赖于内核版本。

如图4所示,为本申请实施例提供的一种浏览器扩展接口的调用方法的流程示意图,该方法可以包括:

s201、浏览器扩展接口通过第一接口向浏览器内核层发送检查指令,检查指令用于指示检查浏览器控件层是否支持使用命令参数执行调用命令。

控件层存在不支持使用命令参数执行调用命令的情况,因此,在扩展接口向控件层发送调用请求之前,可以先请求控件层检查其是否执行该调用命令。

本实施例中,扩展接口可以通过第一接口向内核层发送检查指令,该检查指令用于指示控件层检查是否支持使用命令参数执行调用命令,或者检查当前客户端版本是否支持某个功能。

该第一接口具体可以是issupported接口,上述chrome.framecommand可以包括该issupported接口。例如,chrome.framecommand.issupported(‘opendialog’,callback),用于检查当前客户端是否支持打开“导入书签”面板。

s202、浏览器内核层通过进程间通信转发检查指令给浏览器控件层。

检查指令的发送流程与第一调用请求的发送流程相同,内核层不对该检查指令处理,通过ipc转发检查指令给控件层。

s203、浏览器控件层根据检查指令,检查浏览器控件层是否支持使用命令参数执行调用命令。

检查当前客户端是否支持执行该调用命令,具体是控件层检查自身是否支持执行该调用命令。如果客户端的版本没有升级,则控件层可能不支持该调用命令;如果客户端已经升级,则控件层可以支持执行该调用命令。

s204、浏览器控件层通过进程间通信向浏览器内核层发送检查结果。

控件层通过ipc向内核层返回检查结果。该检查结果包括支持执行该调用命令,或不支持执行该调用命令。

s205、浏览器内核层向浏览器扩展接口发送上述检查结果。

内核层不对检查结果进行处理,向扩展接口转发该检查结果。

在一个实现中,在上述s201中,检查指令还可包括第一回调函数(callback)。并在s202中,内核层发送给控件层的检查指令中包括第二标识(req_id2),该第二标识与第一回调函数关联。则在s205中,内核层可以根据该第二标识查找到该检查指令对应的第一回调函数,并发送第一回调函数给扩展接口,该第一回调函数包括上述检查结果。

如果不使用本方案,在“壳核分离”的架构下,可能会因为内核层和控件层版本不匹配导致的调用失败问题;但如果使用了本方案,就可以在使用invoke调用命令前,提前通过issupported接口检查当前控件层是否支持,避免尝试调用导致的失败。例如,不使用本方案,如图5所示,在不能打开“导入书签”面版的客户端里,调用chrome.opendialog('importbookmark')接口,会导致抛出javascript异常。

新手引导页面前端代码,可以检查当前浏览器客户端是否支持打开“导入书签”面版,针对不同版本的浏览器用户使用不同运营策略(例如,对不支持的用户提示更新浏览器,而不是在代码里直接调用失败),从而挽回这部分用户漏损。

s206、若浏览器控件层支持使用命令参数执行调用命令,浏览器扩展接口通过第二接口向浏览器内核层发送第一调用请求,第一调用请求包括调用命令和命令参数。

s207、浏览器内核层通过进程间通信转发第一调用请求给浏览器控件层。

s208、浏览器控件层解析命令参数,使用命令参数执行调用命令。

s209、浏览器控件层通过进程间通信向浏览器内核层发送调用结果。

s210、浏览器内核层向浏览器扩展接口发送调用结果。

s206~s210为发送第一调用请求的流程,与图3所示实施例的s101~s105基本相同。所不同的是,在s206中,第一调用请求可以包括第二回调函数,该第二接口可以为invoke接口。其中,该invoke接口用于调用命令,例如chrome.framecommand.invoke(‘opendialog),{dialogname:‘importbookmark’,callback},表示调用打开“导入书签”面板。并在s207中,内核层发送给控件层的第一调用请求中包括第一标识(req_id1),该第一标识与第二回调函数关联。则在s210中,内核层可以根据该第一标识查找到该第二回调函数,并发送第二回调函数给扩展接口,该第二回调函数包括上述调用结果。

进一步,对于与控件层无关的扩展接口,则由内核层执行调用命令。则该方法还可以包括:

浏览器扩展接口向浏览器内核层发送第二调用请求,其中,第二调用请求包括调用命令和命令参数,第二调用请求为与浏览器内核层关联的调用请求;

浏览器内核层解析命令参数,使用命令参数执行调用命令,并且向浏览器扩展接口发送调用结果。

根据本申请实施例提供的一种浏览器扩展接口的调用方法,在扩展接口调用命令要由浏览器控件层执行时,浏览器内核层对调用请求不作处理,仅转发调用请求和调用结果,从而无需浏览器内核层重新编译内核,提高了开发效率,且由浏览器控件层执行调用命令,使得调用命令依赖于控件版本,而不依赖于内核版本;并且可以在使用第二接口调用命令前,提前通过第一接口检查当前控件层是否支持该调用命令,避免尝试调用导致的失败。

在一个具体的示例中,如图6所示的新手引导页面的导入书签入口,在第一浏览器的新手引导页面内,使用了本方案提供javascript扩展接口,支持打开浏览器的“导入书签”面版,可以导入例如第二浏览器~第五浏览器等多个浏览器的书签。点击“一键导入书签”按钮后打开的面板如图7所示,可以选择从第二浏览器~第五浏览器等多个浏览器和本地导入书签。如果页面检测到当前的浏览器版本不支持“导入书签”面版,则如图8所示,会弹出“下载最新版第一浏览器”提示。

基于上述浏览器扩展接口的调用方法的同一构思,本申请实施例还提供一种浏览器扩展接口的调用装置的结构示意图,如图9所示,该装置1000包括浏览器扩展接口101、浏览器内核层102和浏览器控件层103。其中:

所述浏览器扩展接口101用于向浏览器内核层发送第一调用请求,所述第一调用请求包括调用命令和命令参数;

所述浏览器内核层102用于转发所述第一调用请求给浏览器控件层;

所述浏览器控件层103用于解析所述命令参数,使用所述命令参数执行所述调用命令,并且向所述浏览器内核层发送所述调用结果;

所述浏览器内核层102还用于向所述浏览器扩展接口转发所述调用结果。

在一个实现中,所述浏览器扩展接口101用于通过第一接口向所述浏览器内核层发送检查指令,所述检查指令用于指示检查所述浏览器控件层是否支持使用所述命令参数执行所述调用命令。

在又一个实现中,所述浏览器扩展接口101用于若所述浏览器控件层支持使用所述命令参数执行所述调用命令,通过第二接口向所述浏览器内核层发送所述调用命令。

在又一个实现中,所述浏览器内核层102接收到的所述第一调用请求包括回调函数;

所述浏览器内核层102用于通过进程间通信转发所述第一调用请求给浏览器控件层,所述转发的第一调用请求还包括第一标识,所述第一标识关联所述回调函数;

所述浏览器控件层103用于通过进程间通信向所述浏览器内核层发送所述调用结果,所述调用结果还包括所述第一标识。

在又一个实现中,所述第一调用请求为与所述浏览器控件层关联的调用请求。

在又一个实现中,所述调用命令为打开对话框,所述命令参数为打开“导入书签”面板。

在又一个实现中,所述浏览器扩展接口101还用于向所述浏览器内核层发送第二调用请求,其中,所述第二调用请求包括调用命令和命令参数,所述第二调用请求为与所述浏览器内核层关联的调用请求;

所述浏览器内核层102还用于解析所述命令参数,使用所述命令参数执行所述调用命令,并且向所述浏览器扩展接口发送调用结果。

根据本申请实施例提供的一种浏览器扩展接口的调用装置,在扩展接口调用命令要由浏览器控件层执行时,浏览器内核层对调用请求不作处理,仅转发调用请求和调用结果,从而无需浏览器内核层重新编译内核,提高了开发效率,且由浏览器控件层执行调用命令,使得调用命令依赖于控件版本,而不依赖于内核版本;并且可以在使用第二接口调用命令前,提前通过第一接口检查当前控件层是否支持该调用命令,避免尝试调用导致的失败。

基于上述方法实施例以及装置实施例的描述,本申请实施例还提供一种终端。请参见图10,该终端至少包括处理器201、输入设备202、输出设备203以及计算机存储介质204。其中,终端内的处理器201、输入设备202、输出设备203以及计算机存储介质204可通过总线或其他方式连接。

计算机存储介质204可以存储在终端的存储器中,所述计算机存储介质204用于存储计算机程序,所述计算机程序包括程序指令,所述处理器201用于执行所述计算机存储介质204存储的程序指令。处理器201(或称中央处理器(centralprocessingunit,cpu))是终端的计算核心以及控制核心,其适于实现一条或多条指令,具体适于加载并执行一条或多条指令从而实现相应方法流程或相应功能。

本申请实施例还提供了一种计算机存储介质(memory),所述计算机存储介质是终端中的记忆设备,用于存放程序和数据。可以理解的是,此处的计算机存储介质既可以包括终端中的内置存储介质,当然也可以包括终端所支持的扩展存储介质。计算机存储介质提供存储空间,该存储空间存储了终端的操作系统。并且,在该存储空间中还存放了适于被处理器201加载并执行的一条或多条的指令,这些指令可以是一个或一个以上的计算机程序(包括程序代码)。需要说明的是,此处的计算机存储介质可以是高速ram存储器,也可以是非不稳定的存储器(non-volatilememory),例如至少一个磁盘存储器;可选的还可以是至少一个位于远离前述处理器的计算机存储介质。

在一个实施例中,可由处理器201加载并执行计算机存储介质中存放的一条或多条指令,以实现上述有关浏览器扩展接口的调用实施例中的方法的相应步骤。具体实现中,计算机存储介质中的一条或多条指令由处理器201加载并执行如下步骤:

控制浏览器扩展接口向浏览器内核层发送第一调用请求,所述第一调用请求包括调用命令和命令参数;

控制所述浏览器内核层转发所述第一调用请求给浏览器控件层;

控制所述浏览器控件层解析所述命令参数,使用所述命令参数执行所述调用命令,并且向所述浏览器内核层发送所述调用结果;

控制所述浏览器内核层向所述浏览器扩展接口转发所述调用结果。

在一个实现中,所述处理器201还用于执行如下步骤:

控制所述浏览器扩展接口通过第一接口向所述浏览器内核层发送检查指令,所述检查指令用于指示检查所述浏览器控件层是否支持使用所述命令参数执行所述调用命令。

在又一个实现中,所述处理器201执行所述浏览器扩展接口向浏览器内核层发送第一调用请求的步骤,包括:

若所述浏览器控件层支持使用所述命令参数执行所述调用命令,控制所述浏览器扩展接口通过第二接口向所述浏览器内核层发送所述调用命令。

在又一个实现中,所述浏览器内核层接收到的所述第一调用请求包括回调函数;所述处理器201控制所述浏览器内核层转发所述第一调用请求给浏览器控件层的步骤,包括:

控制所述浏览器内核层通过进程间通信转发所述第一调用请求给浏览器控件层,所述转发的第一调用请求还包括第一标识,所述第一标识关联所述回调函数;

所述处理器201控制所述浏览器控件层向所述浏览器内核层发送所述调用结果的步骤,包括:

控制所述浏览器控件层通过进程间通信向所述浏览器内核层发送所述调用结果,所述调用结果还包括所述第一标识。

在又一个实现中,所述第一调用请求为与所述浏览器控件层关联的调用请求。

在又一个实现中,所述调用命令为打开对话框,所述命令参数为打开“导入书签”面板。

在又一个实现中,所述处理器201还用于执行如下步骤:

控制述浏览器扩展接口向所述浏览器内核层发送第二调用请求,其中,所述第二调用请求包括调用命令和命令参数,所述第二调用请求为与所述浏览器内核层关联的调用请求;

控制所述浏览器内核层解析所述命令参数,使用所述命令参数执行所述调用命令,并且向所述浏览器扩展接口发送调用结果。

以上所揭露的仅为本申请较佳实施例而已,当然不能以此来限定本申请之权利范围,因此依本申请权利要求所作的等同变化,仍属本申请所涵盖的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1