CN115469937A - 插件运行方法、装置、电子设备及存储介质 - Google Patents
插件运行方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN115469937A CN115469937A CN202211105087.XA CN202211105087A CN115469937A CN 115469937 A CN115469937 A CN 115469937A CN 202211105087 A CN202211105087 A CN 202211105087A CN 115469937 A CN115469937 A CN 115469937A
- Authority
- CN
- China
- Prior art keywords
- plug
- code
- global
- module
- global 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
- G06F9/44526—Plug-ins; Add-ons
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
- G06F21/53—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本申请涉及计算机技术领域,具体而言,涉及一种插件运行方法、装置、电子设备及存储介质。本申请实施例提供的插件运行方法,包括:获取插件信息,插件信息包括插件模块的代码地址和沙箱配置信息;根据代码地址,加载插件模块的初始代码;若沙箱配置信息包括对象隔离指示,则根据对象隔离指示,为初始代码中的真实全局对象提供代理全局对象,代理全局对象用于劫持针对真实全局对象的基本操作;生成目标代码,目标代码包括真实全局对象和代理全局对象;运行目标代码。本申请实施例提供一种插件运行方法、装置、电子设备及存储介质可以避免全局变量污染。
Description
技术领域
本申请涉及计算机技术领域,具体而言,涉及一种插件运行方法、装置、电子设备及存储介质。
背景技术
随着网络技术的迅猛发展,网站结构也日益复杂,网站项目开发过程中,所涉及的代码也越来越多。目前,针对复杂的网站项目开发,通常是将项目拆分为了一个主应用和多个插件模块,各个插件模块再独立为一个项目,分别进行迭代,主应用和各个插件模块在自身全局对象上挂载的全局变量(属性或方法)会供自身及其他插件模块使用。
然而,开发人员在各个插件模块独立开发时,可能会误改全局变量,或声明了与其他插件模块中的全局变量具有相同名称的全局变量,造成全局变量污染。
发明内容
本申请实施例提供一种插件运行方法、装置、电子设备及存储介质,可以避免全局变量污染。
本申请实施例提供的插件运行方法,包括:
获取插件信息,插件信息包括插件模块的代码地址和沙箱配置信息;
根据代码地址,加载插件模块的初始代码;
若沙箱配置信息包括对象隔离指示,则根据对象隔离指示,为初始代码中的真实全局对象提供代理全局对象,代理全局对象用于劫持针对真实全局对象的基本操作;
生成目标代码,目标代码包括真实全局对象和代理全局对象;
运行目标代码。
在一些实施例中,根据对象隔离指示,为初始代码中的真实全局对象提供代理全局对象,包括:
将初始代码转化为代码字符串;
根据对象隔离指示,为代码字符串包裹一层局部作用域;
将预先创建的代理全局对象作为参数传递给局部作用域,以替换初始代码中的真实全局对象。
在一些实施例中,根据对象隔离指示,为代码字符串包裹一层局部作用域,包括:
若对象隔离指示为普通隔离指示,则通过立即执行函数对代码字符串进行包裹,形成局部作用域。
在一些实施例中,运行目标代码之后,插件运行方法还包括:
检测针对真实全局对象中浏览器全局变量的基本操作;
在检测到针对浏览器全局变量的基本操作时,通过代理全局对象,劫持基本操作。
在一些实施例中,根据对象隔离指示,为代码字符串包裹一层局部作用域,还包括:
若对象隔离指示为严格隔离指示,则通过立即执行函数对代码字符串进行包裹,形成初始作用域;
将初始作用域设置到浏览器对象中,形成局部作用域。
在一些实施例中,运行目标代码之后,插件运行方法还包括:
若对象隔离指示为严格隔离指示,则检测针对真实全局对象中浏览器全局变量任意和自由变量的基本操作;
在检测到针对浏览器全局变量任意和自由的基本操作时,通过代理全局对象,劫持基本操作。
在一些实施例中,根据对象隔离指示,为初始代码中的真实全局对象提供代理全局对象之前,插件运行方法还包括:
创建沙箱类;
对沙箱类进行实例化处理,获得沙箱对象;
通过沙箱对象,创建代理全局对象。
在一些实施例中,沙箱配置信息包括对象隔离指示和白名单变量指示,运行目标代码之后,插件运行方法还包括:
确定出白名单变量指示中包括的白名单变量;
检测针对真实全局对象中白名单变量的基本操作;
在检测到针对白名单变量的基本操作时,允许基本操作执行。
在一些实施例中,获取插件信息之前,插件运行方法还包括:
获取插件模块的代码地址和沙箱配置信息;
根据代码地址和沙箱配置信息,生成插件信息;
将插件信息通过轻量级数据交换格式进行存储。
在一些实施例中,基本操作包括增加、删除、赋值、查询中的至少一者。
本申请实施例提供的插件运行装置包括:
信息获取模块,用于获取插件信息,插件信息包括插件模块的代码地址和沙箱配置信息;
代码加载模块,用于根据代码地址,加载插件模块的初始代码;
对象提供模块,用于在沙箱配置信息包括对象隔离指示时,根据对象隔离指示,为初始代码中的真实全局对象提供代理全局对象,代理全局对象用于劫持针对真实全局对象的基本操作;
代码生成模块,用于生成目标代码,目标代码包括真实全局对象和代理全局对象;
代码运行模块,用于运行目标代码。
本申请实施例提供一种电子设备,包括处理器和存储器,存储器存储有多条指令;
处理器从存储器中加载指令,以执行插件运行方法中的步骤。
本申请实施例提供一种计算机可读存储介质,计算机可读存储介质存储有多条指令,指令适于处理器进行加载,以执行插件运行方法中的步骤。
本申请实施例提供的插件运行方法能够获取插件信息,插件信息包括插件模块的代码地址和沙箱配置信息;根据代码地址,加载插件模块的初始代码;若沙箱配置信息包括对象隔离指示,则根据对象隔离指示,为初始代码中的真实全局对象提供代理全局对象,代理全局对象用于劫持针对真实全局对象的基本操作;生成目标代码,目标代码包括真实全局对象和代理全局对象;运行目标代码。也即,本申请实施例中,会为插件模块中的真实全局对象提供一个代理全局对象,在检测到针对真实全局对象的基本操作时,代理全局对象会劫持该基本操作,从而实现对真实全局对象的隔离保护,避免全局变量污染。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1a为本申请实施例提供的一种插件运行方法的步骤流程图。
图1b为本申请实施例提供的一种插件运行方法的完整性实施例流程图。
图2为本申请实施例提供的一种插件运行装置的示意性结构框图。
图3为本申请实施例提供的一种电子设备的示意性结构框图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
此外,需要说明的是,以下所描述的“第一”、“第二”、“第三”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。
本申请实施例提供了一种插件运行方法、装置、电子设备及存储介质。
其中,该插件运行装置具体可以集成在电子设备中,该电子设备可以是电脑,也可以是移动类电子设备,例如,手机、平板等移动终端。
例如,该电子设备可以是移动终端,该移动终端可以:
获取插件信息,插件信息包括插件模块的代码地址和沙箱配置信息;
根据代码地址,加载插件模块的初始代码;
若沙箱配置信息包括对象隔离指示,则根据对象隔离指示,为初始代码中的真实全局对象提供代理全局对象,代理全局对象用于劫持针对真实全局对象的基本操作;
生成目标代码,目标代码包括真实全局对象和代理全局对象;
运行目标代码。
请参阅图1a,图1a为本申请实施例提供的插件运行方法的一种流程示意图。需要说明的是,虽然在流程示意图中示出了逻辑顺序,但是,在某些情况下,也可以以不同于此处的顺序执行所示出或描述的步骤。本申请实施例中,该插件运行方法包括步骤S110、步骤S120、步骤S130、步骤S140和步骤S150。
步骤S110,获取插件信息,插件信息包括插件模块的代码地址和沙箱配置信息。
其中,插件模块是网站项目中,任一通过JavaScript(简称,JS)编程语言编写的软件模块,用于为网站项目提供附加功能。以游戏直播网站,例如,CC直播网站为例,插件模块可以是为其提供虚拟礼物赠送、实时评论、连麦等功能的软件模块。根据插件模块的代码地址,可以加载插件模块的初始代码,也即,开发人员编写的原始代码。
沙箱配置信息包括对象隔离指示或常规运行指示。其中,对象隔离指示用于指示为初始代码中的真实全局对象提供代理全局对象,代理全局对象用于劫持针对真实全局对象的基本操作,例如,针对真实全局变量的增加、删除、赋值、查询等变量操作中的至少一者。当然,基本操作也可以包括变量操作以外的其他操作,例如,属性读取操作。常规运行指示则用于指示在运行插件模块时,直接运行初始代码,也即,不对插件模块的真实全局对象进行隔离保护。
此外,本申请实施例中,可以在网站项目的主应用加载完成之后,获取插件信息。
在一些实施例中,执行步骤S110之前,需要执行以下步骤,以生成插件信息,并对其进行存储:
获取插件模块的代码地址和沙箱配置信息;
根据代码地址和沙箱配置信息,生成插件信息;
将插件信息通过轻量级数据交换格式进行存储。
本申请实施例中,在获取到插件模块的代码地址和沙箱配置信息之后,可以整合代码地址和沙箱配置信息,生成插件信息。示例性的,生成的插件信息可以是:
其中,https://xxx.xxx.xxx.js为代码地址,“sandbox”:0为沙箱配置信息,具体为对象隔离指示。实际实施时,插件信息中也可以将“sandbox”:0替换为“sandbox”:1,用于表征常规运行指示。
在生成插件信息之后,可以将插件信息通过轻量级数据交换格式进行存储。例如,通过JS对象简谱(JavaScript Object Notation,JSON)格式进行存储。
步骤S120,根据代码地址,加载插件模块的初始代码。
本申请实施例中,在获取到插件信息之后,可以从插件信息中提取出代码地址,并根据代码地址,加载插件模块的初始代码、且实际实施时,可以通过浏览器原生的fetch方法加载。
步骤S130,若沙箱配置信息包括对象隔离指示,则根据对象隔离指示,为初始代码中的真实全局对象提供代理全局对象,代理全局对象用于劫持针对真实全局对象的基本操作。
本申请实施例中,若沙箱配置信息包括对象隔离指示,则根据对象隔离指示,为初始代码中的真实全局对象提供代理全局对象,代理全局对象用于劫持针对真实全局对象的基本操作,若沙箱配置信息包括常规运行指示,则在运行插件模块时,直接运行初始代码,也即,不对插件模块的真实全局对象进行隔离保护。此外,如前所述的,基本操作包括针对真实全局变量的增加、删除、赋值、查询等变量操作中的至少一者。
针对沙箱配置信息包括对象隔离指示的情况,在一些实施例中,其可以通过沙箱对象预先创建代理全局对象,具体可以通过以下步骤实现:
创建沙箱类;
对沙箱类进行实例化处理,获得沙箱对象;
通过沙箱对象,创建代理全局对象。
本申请实施例中,可以使用ECMAScript 6(简称,ES6)标准提供的Proxy对象创建沙箱类,再对沙箱类进行实例化处理,获得沙箱对象,最后,通过沙箱对象创建sandbox.globalContext,作为执行上下文,也即,代理全局对象。基于此,在基本操作包括属性读取操作时,属性读取操作具体可以通过has、getOwnProperty等方法实现,本申请实施例对此不作具体限制。
在通过沙箱对象创建代理全局对象之后,可以通过步骤S131、步骤S132和步骤S133,实现步骤S130,用以将代理全局对象提供给初始代码中的真实全局对象。
步骤S131,将初始代码转化为代码字符串。
本申请实施例中,在加载到插件模块的初始代码之后,可以通过浏览器的原生代码转化方法,将初始代码转化为代码字符串。例如,.text方法。
步骤S132,根据对象隔离指示,为代码字符串包裹一层局部作用域。
本申请实施例中,对象隔离指示可以分为两种。
第一种为普通隔离指示,仅用于指示对真实全局对象中的浏览器全局变量进行隔离保护,第二种为严格隔离指示,用于指示对真实全局对象中的浏览器全局变量和自由变量这两者均进行隔离保护。
若对象隔离指示为普通隔离指示,则步骤S132可以通过以下步骤实现:
若对象隔离指示为普通隔离指示,则通过立即执行函数对代码字符串进行包裹,形成局部作用域。
例如,通过立即执行函数function(window,self)对代码字符串进行包裹,形成局部作用域。该过程对应的代码段可以是:
(function(window,self){
……//代码字符串
}
若对象隔离指示为严格隔离指示,则步骤S132可以通过以下步骤实现:
若对象隔离指示为严格隔离指示,则通过立即执行函数对代码字符串进行包裹,形成初始作用域;
将初始作用域设置到浏览器对象中,形成局部作用域。
例如,通过立即执行函数function(window,self)对代码字符串进行包裹,形成初始作用域,再将初始作用域设置到浏览器对象中,形成局部作用域。该过程对应的代码段可以是:
步骤S133,将预先创建的代理全局对象作为参数传递给局部作用域,以替换初始代码中的真实全局对象。
如前所述的,本申请实施例中,可以通过沙箱对象预先创建代理全局对象。那么,在执行步骤S131和步骤S132之后,便可以直接将代理全局对象作为参数传递给局部作用域,以替换初始代码中的真实全局对象。
例如,沙箱对象创建了sandbox.globalContext作为代理全局对象、且对象隔离指示为普通隔离指示,则该过程对应的代码段可以是:
(function(window,self){
……//代码字符串
}.bind(sandbox.globalContext)(sandbox.globalContext,sandbox.globalContext)
再例如,沙箱对象创建了sandbox.globalContext作为代理全局对象、且对象隔离指示为严格隔离指示,则该过程对应的对应代码段可以是:
由于代理全局对象是通过沙箱对象预先创建的,因此,针对沙箱配置信息包括常规运行指示的情况,也可以称之为不为插件模块开启沙箱,针对沙箱配置信息包括对象隔离指示、且对象隔离指示为普通隔离指示的情况,也可以称之为为插件模块开启普通沙箱,针对沙箱配置信息包括对象隔离指示、且对象隔离指示为严格隔离指示的情况,也可以称之为为插件模块开启严格沙箱。
步骤S140,生成目标代码,目标代码包括真实全局对象和代理全局对象。
在通过步骤S110和步骤S120加载到插件模块的初始代码,同时,结合步骤S130,在沙箱配置信息包括对象隔离指示时,根据对象隔离指示,为初始代码中的真实全局对象提供代理全局对象之后,可以生成包括真实全局对象和代理全局对象的目标代码。
步骤S150,运行目标代码。
本申请实施例中,可以通过eval方法,运行目标代码。
在步骤S110、步骤S120、步骤S130、步骤S140和步骤S150执行完成之后,若检测到针对真实全局对象的基本操作,则通过代理全局对象对其进行劫持。但是,针对对象隔离指示为普通隔离指示和严格隔离指示的两种情况,代理全局对象的具体劫持表现是不同的,具体如下所述。
(1)针对对象隔离指示为普通隔离指示的情况:
检测针对真实全局对象中浏览器全局变量的基本操作;
在检测到针对浏览器全局变量的基本操作时,通过代理全局对象,劫持基本操作。
例如,在检测到针对真实全局对象中浏览器全局变量window.foo的赋值操作时,将通过代理全局对象对其进行劫持,从而变更为针对sandbox.globalContext.foo的赋值操作。再例如,在检测到针对真实全局对象中浏览器全局变量window.foo的查询操作时,将通过代理全局对象对其进行劫持,从而变更为针对sandbox.globalContext.foo的查询操作。此外,需要说明的是,对于针对真实全局对象中浏览器全局变量的查询操作而言,若在代理全局对象中未查询到该浏览器全局变量,则会进一步在真实全局对象中查询,对于属性读取操作同样如此。
示例性地,某网站项目中存在插件模块1和插件模块2,其中,针对插件模块1,其沙箱配置信息包括常规运行指示,也即,不对插件模块1的真实全局对象进行隔离保护(不为插件模块1开启沙箱),针对插件模块2,其沙箱配置信息同样包括常规运行指示,也即,不对插件模块2的真实全局对象进行隔离保护(不为插件模块2开启沙箱),那么,在插件模块1和插件模块2中,对浏览器全局变量window.foo进行如下赋值、查询操作,并将操作结果通过控制台打印之后,显示为:
不为插件模块2开启沙箱
在插件模块2中,为window.foo赋值为2
不为插件模块1开启沙箱
在插件模块1中,为window.foo赋值为1
在插件模块2中查询window.foo的值:1
在插件模块1中查询window.foo的值:1
>window.foo
<“1”
当然,若针对插件模块1,其沙箱配置信息包括常规运行指示,也即,不对插件模块1的真实全局对象进行隔离保护(不为插件模块1开启沙箱),但是,针对插件模块2,其沙箱配置信息包括对象隔离指示、且对象隔离指示为普通隔离指示,也即,对插件模块2的真实全局对象进行普通隔离保护(为插件模块2开启普通沙箱),那么,在插件模块1和插件模块2中,对浏览器全局变量window.foo进行如下赋值、查询操作,并将操作结果通过控制台打印之后,显示为:
为插件模块2开启普通沙箱
在插件模块2中,为window.foo赋值为2
不为插件模块1开启沙箱
在插件模块1中,为window.foo赋值为1
在插件模块2中查询window.foo的值:2
在插件模块1中查询window.foo的值:1
>window.foo
<undefined
基于以上示例,可以理解的是,对于在插件模块2中为浏览器全局变量window.foo赋值为2,在插件模块1中为浏览器全局变量window.foo赋值为1的基本操作,在均不为插件模块1、插件模块2开启沙箱的情况下,针对浏览器全局变量window.foo的赋值操作,均会更改到真实全局对象中的浏览器全局变量window.foo上,造成在插件模块2中查询浏览器全局变量window.foo时,获得的是被插件模块1篡改后的值。在不为插件模块1开启沙箱,但为插件模块2开启普通沙箱的情况下,针对插件模块2中浏览器全局变量window.foo的赋值会被代理全局对象拦截,因此,只会更改代理全局对象中的浏览器全局变量window.foo,而不会更改真实全局对象中的浏览器全局变量window.foo,之后,在查询浏览器全局变量window.foo的值时,会获得代理全局对象中的window.foo的值。
(2)针对对象隔离指示为严格隔离指示的情况:
若对象隔离指示为严格隔离指示,则检测针对真实全局对象中浏览器全局变量和自由变量的基本操作;
在检测到针对浏览器全局变量和自由变量的基本操作时,通过代理全局对象,劫持基本操作。
例如,在检测到针对真实全局对象中的自由变量,例如,自由变量foo进行赋值操作时,只会对代理全局对象中的自由变量foo进行赋值操作,而不会对主应用或其他插件模型中的自由变量foo进行赋值操作。再例如,例如,在检测到针对真实全局对象中的自由变量,例如,自由变量foo进行查询操作时,只会对代理全局对象中的自由变量foo进行查询操作,而不会对主应用或其他插件模型中的自由变量foo进行查询操作。此外,需要说明的是,对于针对真实全局对象中浏览器全局变量和自由变量的查询操作而言,若在代理全局对象中未查询到该浏览器全局变量或自由变量,则会进一步在真实全局对象中查询,对于属性读取操作同样如此。
在一些实施例中,沙箱配置信息还可以包括白名单变量指示,用于指示出能够逃逸出代理全局对象挟持的白名单变量。基于此,若沙箱配置信息包括对象隔离指示和白名单变量指示,则在运行目标代码之后,插件运行方法还可以执行以下步骤,以实现白名单变量的逃逸,从而满足暴露白名单变量的应用需求:
确定出白名单变量指示中包括的白名单变量;
检测针对真实全局对象中白名单变量的基本操作;
在检测到针对白名单变量的基本操作时,允许基本操作执行。
也即,在沙箱配置信息包括对象隔离指示和白名单变量指示、且检测到针对白名单变量的基本操作时,将直接对真实全局对象中的白名单变量进行基本操作,而不是对代理对象中的白名单变量进行基本操作。
此外,需要说明的是,在沙箱配置信息包括对象隔离指示和白名单变量指示时,基于通常的业务需求,也可以仅检测针对真实全局对象中白名单变量的删除和赋值这两种基本操作,在检测到针对白名单变量的删除操作或赋值操作时,允许该操作执行。
综上所述,本申请实施例提供的插件运行方法能够获取插件信息,插件信息包括插件模块的代码地址和沙箱配置信息;根据代码地址,加载插件模块的初始代码;若沙箱配置信息包括对象隔离指示,则根据对象隔离指示,为初始代码中的真实全局对象提供代理全局对象,代理全局对象用于劫持针对真实全局对象的基本操作;生成目标代码,目标代码包括真实全局对象和代理全局对象;运行目标代码。也即,本申请实施例中,会为插件模块中的真实全局对象提供一个代理全局对象,在检测到针对真实全局对象的基本操作时,代理全局对象会劫持该基本操作,从而实现对真实全局对象的隔离保护,避免全局变量污染。
最后,将根据上述实施例所描述的插件运行方法,对插件运行方法的一种完整性实施例作流程说明。
如图1b所示,插件运行方法可以包括:
步骤S210,创建沙箱类,并对沙箱类进行实例化处理,获得沙箱对象,再通过沙箱对象,创建代理全局对象;
步骤S220,获取插件模块的代码地址和沙箱配置信息,并根据代码地址和沙箱配置信息,生成插件信息,再将插件信息通过轻量级数据交换格式进行存储;
步骤S230,在网站项目的主应用加载完成之后,获取插件信息,插件信息包括插件模块的代码地址和沙箱配置信息;
步骤S240,根据代码地址,加载插件模块的初始代码,并将初始代码转化为代码字符串;
步骤S250,若沙箱配置信息包括对象隔离指示、且对象隔离指示为普通隔离指示,则通过立即执行函数对代码字符串进行包裹,形成局部作用域,若沙箱配置信息包括对象隔离指示、且对象隔离指示为严格隔离指示,则通过立即执行函数对代码字符串进行包裹,形成初始作用域,并将初始作用域设置到浏览器对象中,形成局部作用域;
步骤S260,将预先创建的代理全局对象作为参数传递给局部作用域,以替换初始代码中的真实全局对象;
步骤S270,生成并运行目标代码,目标代码包括真实全局对象和代理全局对象;
步骤S280,若对象隔离指示为普通隔离指示,则检测针对真实全局对象中浏览器全局变量的基本操作,在检测到针对浏览器全局变量的基本操作、且该浏览器全局变量并非白名单变量时,通过代理全局对象,劫持基本操作,在检测到针对浏览器全局变量的基本操作、且该浏览器全局变量为白名单变量时,允许基本操作执行;
步骤S290,若对象隔离指示为严格隔离指示,则检测针对真实全局对象中浏览器全局变量和自由变量的基本操作,在检测到针对浏览器全局变量或自由变量的基本操作、且该浏览器全局变量或自由变量并非白名单变量时,通过代理全局对象,劫持基本操作,在检测到针对浏览器全局变量或自由变量的基本操作、且该浏览器全局变量或自由变量为白名单变量时,允许基本操作执行。
为了更好地实施上述插件运行方法,本申请实施例还提供一种插件运行装置100。请参阅图2,插件运行装置100具体可以集成在电子设备中,该电子设备可以是终端设备。其中,终端设备可以是手机、平板等移动终端。
该插件运行装置100可以包括:
信息获取模块110,用于获取插件信息,插件信息包括插件模块的代码地址和沙箱配置信息;
代码加载模块120,用于根据代码地址,加载插件模块的初始代码;
对象提供模块130,用于在沙箱配置信息包括对象隔离指示时,根据对象隔离指示,为初始代码中的真实全局对象提供代理全局对象,代理全局对象用于劫持针对真实全局对象的基本操作;
代码生成模块140,用于生成目标代码,目标代码包括真实全局对象和代理全局对象;
代码运行模块150,用于运行目标代码。
在一些实施例中,对象提供模块130,具体用于:
将初始代码转化为代码字符串;
根据对象隔离指示,为代码字符串包裹一层局部作用域;
将预先创建的代理全局对象作为参数传递给局部作用域,以替换初始代码中的真实全局对象。
在一些实施例中,对象提供模块130,具体用于:
在对象隔离指示为普通隔离指示时,通过立即执行函数对代码字符串进行包裹,形成局部作用域。
在一些实施例中,插件运行装置100还可以包括:
第一检测模块,用于检测针对真实全局对象中浏览器全局变量的基本操作;
第一劫持模块,用于在检测到针对浏览器全局变量的基本操作时,通过代理全局对象,劫持基本操作。
在一些实施例中,对象提供模块130,还具体用于:
在对象隔离指示为严格隔离指示时,通过立即执行函数对代码字符串进行包裹,形成初始作用域;
将初始作用域设置到浏览器对象中,形成局部作用域。
在一些实施例中,插件运行装置100还可以包括:
第二检测模块,用于在对象隔离指示为严格隔离指示时,检测针对真实全局对象中浏览器全局变量和自由变量的基本操作;
第二劫持模块,用于在检测到针对浏览器全局变量和自由变量的基本操作时,通过代理全局对象,劫持基本操作。
在一些实施例中,插件运行装置100还可以包括:
沙箱创建模块,用于创建沙箱类;
实例化模块,用于对沙箱类进行实例化处理,获得沙箱对象;
对象生成模块,用于通过沙箱对象,创建代理全局对象。
在一些实施例中,插件运行装置100还可以包括:
白名单确定模块,用于在沙箱配置信息包括对象隔离指示和白名单变量指示时,确定出白名单变量指示中包括的白名单变量;
第三检测模块,用于检测针对真实全局对象中白名单变量的基本操作;
执行模块,用于在检测到针对白名单变量的基本操作时,允许基本操作执行。
在一些实施例中,插件运行装置100还可以包括:
信息获取模块110,用于获取插件模块的代码地址和沙箱配置信息;
信息生成模块,用于根据代码地址和沙箱配置信息,生成插件信息;
信息存储模块,用于将插件信息通过轻量级数据交换格式进行存储。
在一些实施例中,基本操作包括增加、删除、赋值、查询中的至少一者。
具体实施时,以上各个模块可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个模块的具体实施可参见插件运行方法实施例,此处不作赘述。
本申请实施例中,插件运行装置100具有与上述插件运行方法相同的有益效果,也即:
能够获取插件信息,插件信息包括插件模块的代码地址和沙箱配置信息;根据代码地址,加载插件模块的初始代码;若沙箱配置信息包括对象隔离指示,则根据对象隔离指示,为初始代码中的真实全局对象提供代理全局对象,代理全局对象用于劫持针对真实全局对象的基本操作;生成目标代码,目标代码包括真实全局对象和代理全局对象;运行目标代码。也即,本申请实施例中,会为插件模块中的真实全局对象提供一个代理全局对象,在检测到针对真实全局对象的基本操作时,代理全局对象会劫持该基本操作,从而实现对真实全局对象的隔离保护,避免全局变量污染。
相应的,本申请实施例还提供一种电子设备200,该电子设备200可以是终端设备,该终端设备可以是智能手机、平板等移动终端。
请参阅图3,图3为本申请实施例提供的电子设备200的示意性结构框图,该电子设备200包括有一个或者一个以上处理核心的处理器210、有一个或一个以上计算机可读存储介质的存储器220,以及存储在存储器220上并可在处理器上运行的计算机程序。其中,处理器210与存储器220电性连接。本领域技术人员可以理解,图3中示出的电子设备结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
处理器210为电子设备200的控制中心,利用各种接口和线路连接整个电子设备200的各个部分,通过运行或加载存储在存储器220内的软件程序和/或模块,以及调用存储在存储器220内的数据,执行电子设备200的各种功能和处理数据,从而对电子设备200进行整体监控。
在本申请实施例中,电子设备200中的处理器210会按照如下的步骤,将一个或一个以上的应用程序的进程对应的指令加载到存储器220中,并由处理器210来运行存储在存储器220中的应用程序,从而实现各种功能。
例如,可以实现:
获取插件信息,插件信息包括插件模块的代码地址和沙箱配置信息;
根据代码地址,加载插件模块的初始代码;
若沙箱配置信息包括对象隔离指示,则根据对象隔离指示,为初始代码中的真实全局对象提供代理全局对象,代理全局对象用于劫持针对真实全局对象的基本操作;
生成目标代码,目标代码包括真实全局对象和代理全局对象;
运行目标代码。
在一些实施例中,根据对象隔离指示,为初始代码中的真实全局对象提供代理全局对象,包括:
将初始代码转化为代码字符串;
根据对象隔离指示,为代码字符串包裹一层局部作用域;
将预先创建的代理全局对象作为参数传递给局部作用域,以替换初始代码中的真实全局对象。
在一些实施例中,根据对象隔离指示,为代码字符串包裹一层局部作用域,包括:
若对象隔离指示为普通隔离指示,则通过立即执行函数对代码字符串进行包裹,形成局部作用域。
在一些实施例中,运行目标代码之后,插件运行方法还包括:
检测针对真实全局对象中浏览器全局变量的基本操作;
在检测到针对浏览器全局变量的基本操作时,通过代理全局对象,劫持基本操作。
在一些实施例中,根据对象隔离指示,为代码字符串包裹一层局部作用域,还包括:
若对象隔离指示为严格隔离指示,则通过立即执行函数对代码字符串进行包裹,形成初始作用域;
将初始作用域设置到浏览器对象中,形成局部作用域。
在一些实施例中,运行目标代码之后,插件运行方法还包括:
若对象隔离指示为严格隔离指示,则检测针对真实全局对象中浏览器全局变量任意和自由变量的基本操作;
在检测到针对浏览器全局变量任意和自由的基本操作时,通过代理全局对象,劫持基本操作。
在一些实施例中,根据对象隔离指示,为初始代码中的真实全局对象提供代理全局对象之前,插件运行方法还包括:
创建沙箱类;
对沙箱类进行实例化处理,获得沙箱对象;
通过沙箱对象,创建代理全局对象。
在一些实施例中,沙箱配置信息包括对象隔离指示和白名单变量指示,运行目标代码之后,插件运行方法还包括:
确定出白名单变量指示中包括的白名单变量;
检测针对真实全局对象中白名单变量的基本操作;
在检测到针对白名单变量的基本操作时,允许基本操作执行。
在一些实施例中,获取插件信息之前,插件运行方法还包括:
获取插件模块的代码地址和沙箱配置信息;
根据代码地址和沙箱配置信息,生成插件信息;
将插件信息通过轻量级数据交换格式进行存储。
在一些实施例中,基本操作包括增加、删除、赋值、查询中的至少一者。
以上各个操作的具体实施可参见前面的方法实施例,此处不作赘述。
如图3所示,电子设备200还可以包括:触控显示屏230、射频电路240、音频电路250、输入单元260以及电源270。其中,处理器210分别与触控显示屏230、射频电路240、音频电路250、输入单元260,以及电源270电性连接。本领域技术人员可以理解,图3中示出的电子设备结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
触控显示屏230可用于显示图形用户界面以及接收用户作用于图形用户界面产生的操作指令。触控显示屏230可以包括显示面板和触控面板。其中,显示面板可用于显示由用户输入的信息或提供给用户的信息以及电子设备的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。可选的,可以采用液晶显示器(Liquid Crystal Display,LCD)、有机发光二极管(Organic Light-Emitting Diode,OLED)等形式来配置显示面板。触控面板可用于收集用户在其上或附近的触摸操作(例如,用户使用手指、触笔等任何适合的物体或附件在触控面板上或在触控面板附近的操作),并生成相应的操作指令,且操作指令执行对应程序。可选的,触控面板可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器210,并能接收处理器210发来的命令并加以执行。触控面板可覆盖显示面板,当触控面板检测到在其上或附近的触摸操作后,传送给处理器210以确定触摸事件的类型,随后处理器210根据触摸事件的类型在显示面板上提供相应的视觉输出。在本申请实施例中,可以将触控面板与显示面板集成到触控显示屏230而实现输入和输出功能。但是,在某些实施例中,触控面板与触控面板可以作为两个独立的部件来实现输入和输出功能。也即,触控显示屏230也可以作为输入单元260的一部分实现输入功能。
射频电路240可用于收发射频信号,以通过无线通信与网络设备或其他电子设备建立无线通讯,与网络设备或其他电子设备之间收发信号。
音频电路250可以用于通过扬声器、传声器提供用户与电子设备之间的音频接口。音频电路250可将接收到的音频数据转换后的电信号,传输到扬声器,由扬声器转换为声音信号输出;另一方面,传声器将收集的声音信号转换为电信号,由音频电路250接收后转换为音频数据,再将音频数据输出处理器210处理后,经射频电路240以发送给例如另一电子设备,或者将音频数据输出至存储器220以便进一步处理。音频电路250还可能包括耳塞插孔,以提供外设耳机与电子设备的通信。
输入单元260可用于接收输入的数字、字符信息或用户特征信息(例如,指纹、虹膜、面部信息等),以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
电源270用于给电子设备200的各个部件供电。可选的,电源270可以通过电源管理系统与处理器210逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源270还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
尽管图3中未示出,电子设备200还可以包括摄像头、传感器、无线保真模块、蓝牙模块等,在此不作赘述。
在以上实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
由于电子设备200中的处理器210会按照本申请实施例所提供的任一种插件运行方法的步骤,将一个或一个应用程序的进程对应的指令加载到存储器220中,并由处理器210来运行存储在存储器220中的应用程序,从而实现各种功能,因此,可以实现本申请实施例所提供的任一种插件运行方法所能实现的有益效果,也即:
能够获取插件信息,插件信息包括插件模块的代码地址和沙箱配置信息;根据代码地址,加载插件模块的初始代码;若沙箱配置信息包括对象隔离指示,则根据对象隔离指示,为初始代码中的真实全局对象提供代理全局对象,代理全局对象用于劫持针对真实全局对象的基本操作;生成目标代码,目标代码包括真实全局对象和代理全局对象;运行目标代码。也即,本申请实施例中,会为插件模块中的真实全局对象提供一个代理全局对象,在检测到针对真实全局对象的基本操作时,代理全局对象会劫持该基本操作,从而实现对真实全局对象的隔离保护,避免全局变量污染。
本领域普通技术人员可以理解,以上实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
为此,本申请实施例提供一种计算机可读存储介质,其中存储有多条计算机程序,该计算机程序能够被处理器进行加载,以执行本申请实施例所提供的任一种插件运行方法中的步骤。
例如,该计算机程序可以执行如下步骤:
获取插件信息,插件信息包括插件模块的代码地址和沙箱配置信息;
根据代码地址,加载插件模块的初始代码;
若沙箱配置信息包括对象隔离指示,则根据对象隔离指示,为初始代码中的真实全局对象提供代理全局对象,代理全局对象用于劫持针对真实全局对象的基本操作;
生成目标代码,目标代码包括真实全局对象和代理全局对象;
运行目标代码。
在一些实施例中,根据对象隔离指示,为初始代码中的真实全局对象提供代理全局对象,包括:
将初始代码转化为代码字符串;
根据对象隔离指示,为代码字符串包裹一层局部作用域;
将预先创建的代理全局对象作为参数传递给局部作用域,以替换初始代码中的真实全局对象。
在一些实施例中,根据对象隔离指示,为代码字符串包裹一层局部作用域,包括:
若对象隔离指示为普通隔离指示,则通过立即执行函数对代码字符串进行包裹,形成局部作用域。
在一些实施例中,运行目标代码之后,插件运行方法还包括:
检测针对真实全局对象中浏览器全局变量的基本操作;
在检测到针对浏览器全局变量的基本操作时,通过代理全局对象,劫持基本操作。
在一些实施例中,根据对象隔离指示,为代码字符串包裹一层局部作用域,还包括:
若对象隔离指示为严格隔离指示,则通过立即执行函数对代码字符串进行包裹,形成初始作用域;
将初始作用域设置到浏览器对象中,形成局部作用域。
在一些实施例中,运行目标代码之后,插件运行方法还包括:
若对象隔离指示为严格隔离指示,则检测针对真实全局对象中浏览器全局变量任意和自由变量的基本操作;
在检测到针对浏览器全局变量任意和自由的基本操作时,通过代理全局对象,劫持基本操作。
在一些实施例中,根据对象隔离指示,为初始代码中的真实全局对象提供代理全局对象之前,插件运行方法还包括:
创建沙箱类;
对沙箱类进行实例化处理,获得沙箱对象;
通过沙箱对象,创建代理全局对象。
在一些实施例中,沙箱配置信息包括对象隔离指示和白名单变量指示,运行目标代码之后,插件运行方法还包括:
确定出白名单变量指示中包括的白名单变量;
检测针对真实全局对象中白名单变量的基本操作;
在检测到针对白名单变量的基本操作时,允许基本操作执行。
在一些实施例中,获取插件信息之前,插件运行方法还包括:
获取插件模块的代码地址和沙箱配置信息;
根据代码地址和沙箱配置信息,生成插件信息;
将插件信息通过轻量级数据交换格式进行存储。
在一些实施例中,基本操作包括增加、删除、赋值、查询中的至少一者。
以上各个操作的具体实施可参见上述实施例,在此不作赘述。
其中,该存储介质可以包括:只读存储器(Read Only Memory,ROM)、随机存取记忆体(Random Access Memory,RAM)、磁盘或光盘等。
由于该存储介质中所存储的计算机程序,可以执行本申请实施例所提供的任一种插件运行方法中的步骤,因此,可以实现本申请实施例所提供的任一种插件运行方法所能实现的有益效果,也即:
能够获取插件信息,插件信息包括插件模块的代码地址和沙箱配置信息;根据代码地址,加载插件模块的初始代码;若沙箱配置信息包括对象隔离指示,则根据对象隔离指示,为初始代码中的真实全局对象提供代理全局对象,代理全局对象用于劫持针对真实全局对象的基本操作;生成目标代码,目标代码包括真实全局对象和代理全局对象;运行目标代码。也即,本申请实施例中,会为插件模块中的真实全局对象提供一个代理全局对象,在检测到针对真实全局对象的基本操作时,代理全局对象会劫持该基本操作,从而实现对真实全局对象的隔离保护,避免全局变量污染。
以上对本申请实施例所提供的一种插件运行方法、装置、存储介质及电子设备进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (13)
1.一种插件运行方法,其特征在于,包括:
获取插件信息,所述插件信息包括插件模块的代码地址和沙箱配置信息;
根据所述代码地址,加载所述插件模块的初始代码;
若所述沙箱配置信息包括对象隔离指示,则根据所述对象隔离指示,为所述初始代码中的真实全局对象提供代理全局对象,所述代理全局对象用于劫持针对所述真实全局对象的基本操作;
生成目标代码,所述目标代码包括所述真实全局对象和所述代理全局对象;
运行所述目标代码。
2.根据权利要求1所述的插件运行方法,其特征在于,所述根据所述对象隔离指示,为所述初始代码中的真实全局对象提供代理全局对象,包括:
将所述初始代码转化为代码字符串;
根据所述对象隔离指示,为所述代码字符串包裹一层局部作用域;
将预先创建的代理全局对象作为参数传递给所述局部作用域,以替换所述初始代码中的真实全局对象。
3.根据权利要求2所述的插件运行方法,其特征在于,所述根据所述对象隔离指示,为所述代码字符串包裹一层局部作用域,包括:
若所述对象隔离指示为普通隔离指示,则通过立即执行函数对所述代码字符串进行包裹,形成所述局部作用域。
4.根据权利要求3所述的插件运行方法,其特征在于,所述运行所述目标代码之后,所述插件运行方法还包括:
检测针对所述真实全局对象中浏览器全局变量的基本操作;
在检测到针对所述浏览器全局变量的基本操作时,通过所述代理全局对象劫持所述基本操作。
5.根据权利要求2所述的插件运行方法,其特征在于,所述根据所述对象隔离指示,为所述代码字符串包裹一层局部作用域,包括:
若所述对象隔离指示为严格隔离指示,则通过立即执行函数对所述代码字符串进行包裹,形成初始作用域;
将所述初始作用域设置到浏览器对象中,形成所述局部作用域。
6.根据权利要求5所述的插件运行方法,其特征在于,所述运行所述目标代码之后,所述插件运行方法还包括:
若所述对象隔离指示为严格隔离指示,则检测针对所述真实全局对象中浏览器全局变量和自由变量的基本操作;
在检测到针对所述浏览器全局变量和所述自由变量的基本操作时,通过所述代理全局对象劫持所述基本操作。
7.根据权利要求2所述的插件运行方法,其特征在于,所述根据所述对象隔离指示,为所述初始代码中的真实全局对象提供代理全局对象之前,所述插件运行方法还包括:
创建沙箱类;
对所述沙箱类进行实例化处理,获得沙箱对象;
通过所述沙箱对象,创建所述代理全局对象。
8.根据权利要求1~7中任一项所述的插件运行方法,其特征在于,若所述沙箱配置信息包括所述对象隔离指示和白名单变量指示,所述运行所述目标代码之后,所述插件运行方法还包括:
确定出所述白名单变量指示中包括的白名单变量;
检测针对所述真实全局对象中白名单变量的基本操作;
在检测到针对所述白名单变量的基本操作时,允许所述基本操作执行。
9.根据权利要求1所述的插件运行方法,其特征在于,所述获取插件信息之前,所述插件运行方法还包括:
获取所述插件模块的代码地址和所述沙箱配置信息;
根据所述代码地址和所述沙箱配置信息,生成所述插件信息;
将所述插件信息通过轻量级数据交换格式进行存储。
10.根据权利要求1所述的插件运行方法,其特征在于,所述基本操作包括增加、删除、赋值、查询中的至少一者。
11.一种插件运行装置,其特征在于,包括:
信息获取模块,用于获取插件信息,所述插件信息包括插件模块的代码地址和沙箱配置信息;
代码加载模块,用于根据所述代码地址,加载所述插件模块的初始代码;
对象提供模块,用于在所述沙箱配置信息包括对象隔离指示时,根据所述对象隔离指示,为所述初始代码中的真实全局对象提供代理全局对象,所述代理全局对象用于劫持针对所述真实全局对象的基本操作;
代码生成模块,用于生成目标代码,所述目标代码包括所述真实全局对象和所述代理全局对象;
代码运行模块,用于运行所述目标代码。
12.一种电子设备,其特征在于,包括处理器和存储器,所述存储器存储有多条指令;
所述处理器从所述存储器中加载指令,以执行如权利要求1~10中任一项所述的插件运行方法中的步骤。
13.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有多条指令,所述指令适于处理器进行加载,以执行权利要求1~10中任一项所述的插件运行方法中的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211105087.XA CN115469937A (zh) | 2022-09-09 | 2022-09-09 | 插件运行方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211105087.XA CN115469937A (zh) | 2022-09-09 | 2022-09-09 | 插件运行方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115469937A true CN115469937A (zh) | 2022-12-13 |
Family
ID=84368572
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211105087.XA Pending CN115469937A (zh) | 2022-09-09 | 2022-09-09 | 插件运行方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115469937A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115827140A (zh) * | 2022-12-20 | 2023-03-21 | 北京基调网络股份有限公司 | 可视化大屏的生成方法、装置、设备及存储介质 |
CN117874749A (zh) * | 2024-01-15 | 2024-04-12 | 北京盛邦赛云科技有限公司 | 沙箱式代码扩展隔离装置和方法 |
-
2022
- 2022-09-09 CN CN202211105087.XA patent/CN115469937A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115827140A (zh) * | 2022-12-20 | 2023-03-21 | 北京基调网络股份有限公司 | 可视化大屏的生成方法、装置、设备及存储介质 |
CN115827140B (zh) * | 2022-12-20 | 2024-03-12 | 北京基调网络股份有限公司 | 可视化大屏的生成方法、装置、设备及存储介质 |
CN117874749A (zh) * | 2024-01-15 | 2024-04-12 | 北京盛邦赛云科技有限公司 | 沙箱式代码扩展隔离装置和方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107038112B (zh) | 应用界面的调试方法及装置 | |
CN107734616B (zh) | 应用程序关闭方法、装置、存储介质和电子设备 | |
CN106502703B (zh) | 一种函数调用方法和装置 | |
CN108595218B (zh) | 一种加载系统动态库的方法和装置 | |
CN115469937A (zh) | 插件运行方法、装置、电子设备及存储介质 | |
CN109947650B (zh) | 脚本步骤处理方法、装置和系统 | |
CN112257135A (zh) | 一种基于多线程的模型加载方法、装置、存储介质及终端 | |
CN112000566B (zh) | 测试用例的生成方法及装置 | |
CN112162795B (zh) | 一种插件启动方法、装置、计算机设备和存储介质 | |
CN111723002A (zh) | 一种代码调试方法、装置、电子设备及存储介质 | |
KR20200106703A (ko) | 사용자 선택 기반의 정보를 제공하는 방법 및 장치 | |
CN110489679B (zh) | 一种浏览器内核的处理方法、装置及存储介质 | |
CN113408260A (zh) | 一种项目工程生成方法、装置、计算机设备及存储介质 | |
CN112667223A (zh) | 组件配置表的生成方法、装置、电子设备及存储介质 | |
CN114237743B (zh) | 界面加载方法、装置、电子设备和存储介质 | |
CN112817582B (zh) | 代码处理方法、装置、计算机设备和存储介质 | |
CN114327087A (zh) | 输入事件处理方法、装置、电子设备和存储介质 | |
US10976997B2 (en) | Electronic device outputting hints in an offline state for providing service according to user context | |
CN112749074A (zh) | 一种测试用例推荐方法以及装置 | |
CN112328304B (zh) | 一种脚本适配方法、系统、设备及计算机存储介质 | |
CN112163174B (zh) | 消息的显示方法、装置、存储介质及计算机设备 | |
CN109145598B (zh) | 脚本文件的病毒检测方法、装置、终端及存储介质 | |
CN110245017B (zh) | 资源标识的分配方法和设备 | |
CN117412278A (zh) | 蓝牙设备扫描控制方法、装置、电子设备及存储介质 | |
CN111897726B (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 |