发明内容
本发明提供一种基于浏览器加载终端网络应用的插件的方法及设备,用以解决现有技术中存在的浏览器只能在引擎启动时加载终端中的网络应用所需的全部插件,加载的过多的插件造成内存的浪费以及造成浏览器的启动速度和运行速度的降低的问题。
本发明提供的一种基于浏览器加载终端网络应用的插件的方法,包括:
终端中的浏览器在启动后通过浏览器的引擎仅加载基础插件;
在网络应用启动后,若确定需要加载网络应用的至少一个目标插件,则通过基础插件的扩展接口获取目标插件的描述符和函数调用地址,以加载目标插件。
可选地,浏览器根据下列方式判断是否需要加载网络应用的至少一个目标插件:
浏览器在收到网络应用发送的目标插件加载请求后,确定需要加载网络应用的至少一个目标插件;和/或
浏览器在确定启动的网络应用属于预设的需要加载目标插件的网络应用集合后,确定需要加载网络应用的至少一个目标插件。
可选地,浏览器通过基础插件的扩展接口获取目标插件的描述符和函数调用地址,包括:
浏览器通过基础插件的扩展接口从动态连接库中获取目标插件的描述符和函数调用地址。
可选地,浏览器通过基础插件的扩展接口从动态连接库中获取目标插件的描述符和函数调用地址之前,还包括:
浏览器根据网络应用发送的目标插件加载请求确定目标插件对应的动态连接库;或
浏览器根据目标插件与动态连接库的对应关系确定目标插件对应的动态连接库。
可选地,浏览器通过基础插件的扩展接口获取目标插件的描述符和函数调用地址之后,还包括:
浏览器在确定收到网络应用发送的目标插件执行请求后,根据获取的描述符和函数调用地址,从所有函数调用地址中确定目标插件执行请求中的描述符对应的函数调用地址;
浏览器根据调用地址调用函数。
本发明提供的一种基于浏览器加载终端网络应用的插件的设备,包括:
基础插件加载模块,用于在终端中的浏览器启动后通过浏览器的引擎仅加载基础插件;
目标插件加载模块,用于在网络应用启动后,若确定需要加载网络应用的至少一个目标插件,则通过基础插件的扩展接口获取目标插件的描述符和函数调用地址,以加载目标插件。
可选地,目标插件加载模块具体用于,根据下列方式判断是否需要加载网络应用的至少一个目标插件:
在收到网络应用发送的目标插件加载请求后,确定需要加载网络应用的至少一个目标插件;和/或
在确定启动的网络应用属于预设的需要加载目标插件的网络应用集合后,确定需要加载网络应用的至少一个目标插件。
可选地,目标插件加载模块具体用于:
通过基础插件的扩展接口从动态连接库中获取目标插件的描述符和函数调用地址。
可选地,目标插件加载模块还用于:
在通过基础插件的扩展接口获取目标插件的描述符和函数调用地址之前,根据网络应用发送的目标插件加载请求确定目标插件对应的动态连接库;或
在通过基础插件的扩展接口获取目标插件的描述符和函数调用地址之前,根据目标插件与动态连接库的对应关系确定目标插件对应的动态连接库。
可选地,目标插件加载模块还用于:
在通过基础插件的扩展接口获取目标插件的描述符和函数调用地址之后,在确定收到网络应用发送的目标插件执行请求后,根据获取的描述符和函数调用地址,从所有函数调用地址中确定目标插件执行请求中的描述符对应的函数调用地址;
根据调用地址调用函数。
根据本发明实施例提供的基于浏览器加载终端网络应用的插件的方法,终端中的浏览器在启动后仅加载基础插件,在确定网络应用启动后,若确定需要加载该网络应用的至少一个目标插件,则通过基础插件的扩展接口获取目标插件的描述符和函数调用地址,以加载目标插件,因此本发明提供了更为灵活的插件加载方法,在启动浏览器时加载基础插件并且可以不加载目标插件,而在浏览器启动后通过基础插件加载需要用到的目标插件,从而节省了浏览器的内存和提高了浏览器的启动速度和运行速度。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
以图2说明本发明实施例中基于浏览器加载终端网络应用的插件的方法,该方法包括以下步骤:
步骤201:终端中的浏览器在启动后通过浏览器的引擎仅加载基础插件;
步骤202:在网络应用启动后,若确定需要加载网络应用的至少一个目标插件,则通过基础插件的扩展接口获取目标插件的描述符和函数调用地址,以加载目标插件。
本发明实施例中,智能电视等终端中的浏览器在引擎启动后,只加载基础插件;在网络应用启动后,若浏览器判断需要加载网络应用用于实现特定网络功能的至少一个目标插件,则浏览器通过已经加载的基础插件的扩展接口获取目标插件的描述符和函数调用地址,进而加载需要加载的至少一个目标插件。由于浏览器能够在启动后金价在基础插件,而在判断需要加载网络应用的至少一个目标插件后通过基础插件进行目标插件的加载,实现了插件的灵活加载,因此不再需要在浏览器的引擎启动时加载全部的网络应用的全部插件,减少了浏览器启动过程中需要加载的插件数量,从而节省了内存并且有利于提高浏览器的启动速度和运行速度。其中,目标插件的函数调用地址可以是目标插件的函数指针。
本发明实施例中的浏览器可以是智能电视中的浏览器,也可以是智能手机PC设备或者平板电脑等其他终端中的浏览器。
本发明实施例中网络应用的特定网络功能是指网络应用需要借助浏览器加载的插件实现的网络功能,其中,特定网络功能是浏览器自身不具备的网络功能,需要浏览器通过加载的插件来实现。例如,获取智能电视平台信息(例如获取智能平台型号信息)和调用智能电视的底层功能(例如对智能电视系统进行配置信息的写入)均需要通过浏览器来实现,而这些网络功能并不是浏览器自身所具备的功能,因此是特定网络功能。浏览器通过加载的插件可以实现特定网络功能,例如,浏览器通过Javascript插件A实现获取智能电视平台信息和通过Javascript插件A实现改写智能电视的配置信息。
本发明实施例中,目标插件是指已经启动的网络应用实现特定网络功能时需要浏览器加载的插件,其中网络应用可以是终端中安装的能够实现特定网络功能的业务,例如网络应用可以是能够进行终端的配置信息改写的管理网络应用,也可以是用于进行终端的平台型号等信息获取的视频网络应用。例如,网络应用A借助浏览器加载的插件A来实现获取智能电视平台信息的功能,则网络应用A的目标插件为插件A。另外,需要说明的是,一个网络应用能够实现的特定网络功能可能有一个或者多个,因此,同一个网络应用可以具备一个或者多个目标插件。
在网络应用启动时,网络应用能够确定需要浏览器加载的目标插件的信息,并向浏览器发出针对目标插件的加载请求,例如,网络应用A在启动时确定需要借助浏览器加载的插件A来实现获取智能电视平台信息的功能,则网络应用A在启动时会向浏览器发送针对目标插件A的加载请求。另外,若网络应用确定需要浏览器加载多个目标插件,则网络应用能够针对每一个目标插件向浏览器发送加载请求,或通过同一个加载请求向浏览器请求加载多个目标插件。
其中,目标插件是在运行过程中进行加载的函数库。浏览器可以在引擎启动后通过基础插件加载目标插件。其中函数库中包含目标插件实现特定功能的函数,在实现特定网络功能时需要调用函数库中的函数。
本发明实施例中,基础插件是浏览器在引擎启动时加载的插件,用于进行接口的扩展,并通过扩展的接口加载目标插件。其中,浏览器可以按照标准Javascript插件的配置信息加载基准插件。例如,可以是标准的Javascript插件,用于进行Javascript Api(接口)的扩展,并在需要加载目标插件时,通过扩展的Javascript Api加载目标插件。
本发明实施例中,在获取目标插件的描述符和函数调用地址时,浏览器需要通过基础插件调用基础插件的扩展接口,进而通过扩展接口获取目标插件的描述符和函数调用地址。由于浏览器使用基础插件的扩展接口获取目标插件的描述符和函数调用地址,并且基础插件是在浏览器的引擎启动时就加载好的,因此在需要加载目标插件时浏览器能够通过基础插件的扩展接口实现目标插件的加载。
其中,插件对应的描述符是用于描述插件的描述信息,例如可以是描述插件所实现功能的描述信息,描述符与函数具有对应关系,例如,插件A对应的描述符A与插件A的函数A之间具有对应关系。插件的函数的调用地址是指调用插件所包含的函数需要访问的地址,调用地址可以是函数的指针。
由于浏览器需要调用目标插件的函数来实现网络应用的特定网络功能,因此,在加载目标插件时,浏览器需要通过基础插件获取并存储目标插件对应的函数的调用地址。例如,浏览器通过基础插件的扩展接口获取目标插件A的描述符A和函数调用地址A,在收到网络应用发送的包含描述符A的目标插件执行请求后,根据描述符A确定函数调用地址A为需要调用的目标插件A的调用地址,进而能够实现对目标插件A的函数的调用。
可选地,浏览器根据下列方式判断是否需要加载网络应用的至少一个目标插件:浏览器在收到网络应用发送的目标插件加载请求后,确定需要加载网络应用的至少一个目标插件;和/或浏览器在确定启动的网络应用属于预设的需要加载目标插件的网络应用集合后,确定需要加载网络应用的至少一个目标插件。
本发明实施例中,浏览器可以通过多种方式判断是否需要加载网络应用的目标插件,下面举例两种:
方式一:浏览器在收到网络应用发送的目标插件加载请求后,根据目标插件加载请求确定需要加载目标插件。
具体来说,智能电视等终端中的网络应用能够确定自身需要加载的目标插件,网络应用在启动时,向浏览器发送针对目标插件的目标插件加载请求,浏览器在确定收到目标插件加载请求后,确定需要加载目标插件加载请求对应的目标插件。
例如,网络应用A在确定需要请求浏览器加载插件A以实现获取智能电视平台信息的功能,则网络应用A在启动时向浏览器发送加载插件A的目标插件加载请求,浏览器在收到该目标插件加载请求后,确定需要加载插件A。
方式二:浏览器在确定网络应用正在启动后,可以根据已知的网络应用与目标插件的对应关系,判断能否确定正在启动的网络应用对应的目标插件,若能,则强调需要加载目标插件。
具体来说,智能电视等终端中的浏览器可以获取网络应用与目标插件的对应关系表,例如表1所示。例如,浏览器可以根据预设的网络应用与目标插件的对应关系获取网络应用与目标插件的对应关系表,浏览器也可以根据终端在安装网络应用时建立的网络应用与目标插件的对应关系建立网络应用与目标插件的对应关系表。
表1
在根据设备进程等确定正在启动的网络应用后,浏览器根据网络应用与目标插件的对应关系表判断能否确定正在启动的网络应用对应的目标插件,若浏览器根据网络应用与目标插件的对应关系表能够确定正在启动的网络应用对应的目标插件,则浏览器确定需要加载目标插件;否则,浏览器确定不需要加载目标插件。
例如,浏览器确定网络应用B在启动,根据表1,浏览器能够确定网络应用B对应的目标插件为插件B,则浏览器确定需要加载插件B。
网络应用能够确定自身需要加载的目标插件,之后在网络应用启动时,网络应用向浏览器发送针对目标插件的目标插件加载请求,浏览器在确定收到目标插件加载请求后,确定需要加载目标插件加载请求对应的目标插件。
本发明实施例中,若浏览器在网络应用启动后收到网络应用发送的目标插件加载请求,则浏览器可以不再根据网络应用与目标插件的对应关系确定该网络应用对应的目标插件,直接根据目标插件加载请求确定需要加载的插件即可。
另外,若浏览器在网络应用启动后没有收到网络应用发送的目标插件加载请求,并且浏览器无法根据网络应用与目标插件的对应关系确定该网络应用对应的目标插件,则浏览器放弃加载该网络应用对应的目标插件。
可选地,浏览器通过基础插件的扩展接口获取目标插件的描述符和函数调用地址,包括:浏览器通过基础插件的扩展接口从动态连接库中获取目标插件的描述符和函数调用地址。
由于网络应用需要借助浏览器加载的目标插件实现特定的网络功能,其中,网络应用向浏览器发送包含描述符的目标插件调用请求,以使浏览器根据描述符确定插件对应的函数的调用地址,进而调用相应的函数,因此浏览器需要通过基础插件获取至少一个目标插件对应的描述符与函数的调用地址的对应关系。
浏览器可以通过基础插件的扩展接口从动态连接库中获取目标插件的描述符和函数调用地址。
其中,本发明实施例中的动态连接库是存储目标插件的描述符以及目标插件的函数调用地址的函数库,其中动态连接库存储的插件的描述符与调用地址相对应。根据动态连接库的动态加载原理,在调用插件函数时,根据动态连接库获取函数的调用地址能够实现插件的动态加载。
在本发明实施例中,可以根据动态连接库文件名通过dlopen函数打开动态连接库,之后通过dlsym等函数对动态连接库中的函数的调用地址进行操作。
动态连接库的文件名是插件的动态连接库所具有的文件名称。在智能电视等终端中,根据插件的动态连接库的文件名可以打开对应的动态连接库并对动态连接库中的存储的函数或者地址进行操作。例如,动态连接库的文件名可以是后缀为.dll的文件名,网络应用在向浏览器请求加载目标插件时可以在目标插件加载请求中携带需要加载的插件对应的后缀为.dll的链接库文件名,浏览器根据后缀为.dll的链接库文件名可以查找到目标插件对应的动态连接库。
具体来说,可以通过dlopen函数根据后缀为.dll的链接库文件名打开目标插件的动态连接库,并通过dlsym函数获取动态连接库中插件对应的函数调用地址,以及在获取函数调用地址后,通过dlclose函数卸载已打开的动态连接库以释放内存。
可选地,浏览器通过基础插件的扩展接口从动态连接库中获取目标插件的描述符和函数调用地址之前,还包括:浏览器根据网络应用发送的目标插件加载请求确定目标插件对应的动态连接库;或浏览器根据目标插件与动态连接库的对应关系,确定目标插件对应的动态连接库。
本发明实施例中,浏览器在通过基础插件的扩展接口从动态连接库中获取目标插件的描述符和函数调用地址之前,还需要确定目标插件对应的动态连接库。其中,浏览器可以根据网络应用发送的目标插件加载请求确定目标插件对应的动态连接库;浏览器也可以根据目标插件与动态连接库的对应关系确定目标插件对应的动态连接库。
下面分别说明浏览器确定目标插件对应的动态连接库的两种方式:
方式一,浏览器根据目标插件加载请求中的信息确定目标插件对应的动态连接库。例如,网络应用发送的目标插件加载请求中可以携带目标插件对应的动态链接库文件名,由于动态链接库文件名与动态链接库之间具有对应关系,因此浏览器可以根据目标插件加载请求中携带的动态链接库文件名确定目标插件对应的动态链接库。
方式二,浏览器根据目标插件与动态连接库的对应关系确定目标插件对应的动态连接库。浏览器在确定需要加载的目标插件后,可以根据预设的或者安装网络应用时存储的目标插件与动态链接库的对应关系确定需要加载的目标插件的动态连接库。
浏览器可以预先存储目标插件与动态链接库的对应关系表,或者在安装网络应用时存储网络应用所需的目标插件与动态链接库的对应关系表。目标插件与动态链接库的对应关系表如表2所示,在确定需要加载的目标插件后,可以根据目标插件与动态链接库的对应关系表确定目标插件对应的动态链接库。
表2
例如,在确定需要加载的目标插件为插件C后,根据目标插件与动态链接库的对应关系表确定插件C对应的动态链接库为动态连接库C,之后可以从动态连接库C中获取目标插件的描述符和函数调用地址。
可选地,在获取浏览器通过基础插件获取描述符与函数的调用地址的对应关系之后,存储描述符与函数的调用地址的对应关系。
本发明实施例中,在获取描述符与函数的调用地址的对应关系之后,将描述符与函数的调用地址的对应关系进行存储,以方便在需要调用插件的函数时快速进行函数调用地址的查找,例如可以存储为描述符与函数的调用地址的对应关系表,例如表3所示。
目标插件的描述符 |
调用地址 |
1、描述符A |
1、调用地址A |
2、描述符B |
2、调用地址B |
3、描述符C |
3、调用地址C |
4、描述符D |
4、调用地址D |
…… |
…… |
表3
本发明实施例中,如图3所示,智能电视等终端中的插件之间可能存在树形关联,例如,在通过基础插件301加载插件AA303时需要通过插件A302,则在获取插件AA303的描述符与调用地址的对应关系时还需要确定插件A302的与描述符与调用地址的对应关系,进而在调用插件AA303时能够先进行插件A302的函数的调用,再进行插件AA303的函数的调用,从而实现对插件AA303的调用。
本发明实施例中,可以通过Map容器建立描述符与函数的调用地址的对应关系,例如,将插件的描述符作为Map容器的Key(关键字)以及将调用地址作为Map的Value(值),在存储进行树形关联插件的描述符与函数的调用地址的对应关系时,能够根据Map容器形成描述符与调用地址之间的红黑树(Red Black Tree)对应关系,在需要查找调用地址时能够根据描述符进行调用地址的查询。
可选地,浏览器在确定收到网络应用发送的目标插件执行请求后,根据获取的描述符和函数调用地址,从所有函数调用地址中确定目标插件执行请求中的描述符对应的函数调用地址;浏览器根据调用地址调用函数。
本发明实施例中,浏览器在收到网络应用发送的目标插件执行请求后,能够根据根据获取的描述符和函数调用地址,从所有函数调用地址中确定网络应用发送的目标插件执行请求中的描述符对应的函数的调用地址;在确定函数的调用地址后,浏览器可以根据调用地址调用函数。其中,目标插件执行请求是网络应用在需要调用浏览器加载的插件以实现特定网络功能时向浏览器发送的请求,目标插件执行请求包括网络应用请求调用的插件对应的描述符。
在收到目标插件执行请求后,浏览器可以根据目标插件执行请求中的描述符从获取的全部插件的函数调用地址中确定目标插件执行请求对应的函数的调用地址,例如,浏览器在读取描述符与函数的调用地址的对应关系后,存储如表3所示的描述符与函数的调用地址的对应关系表,若浏览器收到的目标插件执行请求中包含描述符A,则浏览器可以根据目标插件执行请求中的描述符通过查询表3确定描述符A对应的函数的调用地址为调用地址A,进而浏览器能够根据调用地址A进行插件的调用。
图4为本发明实施例提供的一种基于浏览器加载终端网络应用的插件的方法的步骤示意图,该方法包括以下步骤:
步骤401:浏览器开始启动;
步骤402:浏览器引擎加载基础插件;
步骤403:在网络应用启动后,浏览器判断是否需要加载网络应用的目标插件,若是,则执行步骤404,否则执行步骤405;
步骤404:浏览器确定需要加载的目标插件的动态连接库,之后执行步骤406;
步骤405:浏览器确定不需要加载插件,之后结束本流程;
步骤406:浏览器读取目标插件的动态连接库中的描述符与函数的调用地址;
步骤407:浏览器建立描述符与函数的调用地址的对应关系表;
步骤408:在收到网络应用发送的目标插件执行请求后,浏览器根据建立的描述符与函数的调用地址的对应关系表,从所有函数的调用地址中确定目标插件执行请求中的描述符对应的函数的调用地址;
步骤409:浏览器根据调用地址调用函数。
基于同一发明构思,本发现实施例还提供了一种基于浏览器加载终端网络应用的插件的设备,由于该设备解决问题的原理与本发明实施例提供的进行插件加载的方法相似,因此该设备的实施可以参见方法的实施,重复之处不再赘述。
如图5所示,本发明实施例提供的一种基于浏览器加载终端网络应用的插件的设备,包括基础插件加载模块501以及目标插件加载模块502:
基础插件加载模块501,用于在终端中的浏览器启动后通过浏览器的引擎仅加载基础插件;
目标插件加载模块502,用于在网络应用启动后,若确定需要加载网络应用的至少一个目标插件,则通过基础插件的扩展接口获取目标插件的描述符和函数调用地址,以加载目标插件。
可选地,目标插件加载模块502具体用于:
根据下列方式判断是否需要加载网络应用的至少一个目标插件:
在收到网络应用发送的目标插件加载请求后,确定需要加载网络应用的至少一个目标插件;和/或
在确定启动的网络应用属于预设的需要加载目标插件的网络应用集合后,确定需要加载网络应用的至少一个目标插件。
可选地,目标插件加载模块502具体用于:
通过基础插件的扩展接口从动态连接库中获取目标插件的描述符和函数调用地址。
可选地,目标插件加载模块502还用于:
在通过基础插件的扩展接口获取目标插件的描述符和函数调用地址之前,根据网络应用发送的目标插件加载请求确定目标插件对应的动态连接库;或
在通过基础插件的扩展接口获取目标插件的描述符和函数调用地址之前,根据目标插件与动态连接库的对应关系确定目标插件对应的动态连接库。
可选地,目标插件加载模块502还用于:
在通过基础插件的扩展接口获取目标插件的描述符和函数调用地址之后,在确定收到网络应用发送的目标插件执行请求后,根据获取的描述符和函数调用地址,从所有函数调用地址中确定目标插件执行请求中的描述符对应的函数调用地址;
根据调用地址调用函数。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。