CN114026540B - 用于支持和协商跨多个产品的多个api版本的***和方法 - Google Patents
用于支持和协商跨多个产品的多个api版本的***和方法 Download PDFInfo
- Publication number
- CN114026540B CN114026540B CN202080042791.8A CN202080042791A CN114026540B CN 114026540 B CN114026540 B CN 114026540B CN 202080042791 A CN202080042791 A CN 202080042791A CN 114026540 B CN114026540 B CN 114026540B
- Authority
- CN
- China
- Prior art keywords
- program
- abi
- api
- version
- versions
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 64
- 238000011161 development Methods 0.000 claims abstract description 71
- 238000004891 communication Methods 0.000 claims description 33
- 238000012545 processing Methods 0.000 claims description 12
- 230000003213 activating effect Effects 0.000 claims description 7
- 230000008569 process Effects 0.000 abstract description 15
- 238000004590 computer program Methods 0.000 abstract description 13
- 230000003068 static effect Effects 0.000 abstract description 6
- 239000008186 active pharmaceutical agent Substances 0.000 abstract 3
- 238000010168 coupling process Methods 0.000 description 24
- 238000005859 coupling reaction Methods 0.000 description 24
- 230000008878 coupling Effects 0.000 description 23
- 230000003287 optical effect Effects 0.000 description 11
- 238000010586 diagram Methods 0.000 description 9
- 230000003993 interaction Effects 0.000 description 8
- 230000009977 dual effect Effects 0.000 description 7
- 230000006399 behavior Effects 0.000 description 6
- 238000009434 installation Methods 0.000 description 6
- 238000012360 testing method Methods 0.000 description 5
- BIWCEXHDIQZFHI-UHFFFAOYSA-N 1,2,3,5-tetrachloro-4-(2,4-dichlorophenoxy)benzene Chemical compound ClC1=CC(Cl)=CC=C1OC1=C(Cl)C=C(Cl)C(Cl)=C1Cl BIWCEXHDIQZFHI-UHFFFAOYSA-N 0.000 description 4
- 230000008859 change Effects 0.000 description 4
- 238000009877 rendering Methods 0.000 description 4
- 238000013459 approach Methods 0.000 description 3
- 230000001066 destructive effect Effects 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 230000003442 weekly effect Effects 0.000 description 2
- 238000012356 Product development Methods 0.000 description 1
- 230000004913 activation Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 238000009413 insulation Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 230000007935 neutral effect Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/541—Interprogram communication via adapters, e.g. between incompatible applications
-
- 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/44536—Selecting among different versions
-
- 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/958—Organisation or management of web site content, e.g. publishing, maintaining pages or automatic linking
-
- 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
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Computer Security & Cryptography (AREA)
- Data Mining & Analysis (AREA)
- Stored Programmes (AREA)
Abstract
在本文中描述了用于支持和协商跨多个产品的多个(例如静态)应用编程接口(API)版本的方法、***和计算机程序产品。可互操作程序(诸如不同web浏览器应用)可以提供针对API的多个版本的同时支持。API和程序API适配器可以被版本化为管理异步开发的程序和API的兼容性,这些异步开发的程序和API可以在许多计算环境中被异步安装和更新。适配器可以包括程序源代码的版本化部分。开发中程序代码和API可以被分叉以创建稳定接口的版本化快照。API和适配器的“开发中”版本可以与版本化API和适配器同时存在。兼容版本协商可以例如在进程启动期间发生。协商可以激活由两个程序支持的最高API版本。
Description
背景技术
一些较旧(遗留)网站可以与较旧web浏览器(例如Internet/>web浏览器)兼容,而较新网站可以与较新web浏览器(例如/>web浏览器)兼容。单个企业可以具有较旧网站与较新网站的组合,这可能需要在多个浏览器应用(例如Internet/>和/>)之间切换。
发明内容
本发明内容的提供是为了以简化的形式介绍对于在下面的详细描述中进一步描述的构思的选择。本发明内容既不旨在标识所要求的主题的关键特征或本质特征,也不旨在用于限制所要求的主题的范围。
在本文中描述了用于支持和协商跨多个产品的多个(例如静态)API版本的方法、***和计算机程序产品。API和程序API适配器可以被版本化为管理异步开发的程序和API的兼容性,这些异步开发的程序和API可以在许多计算环境中被异步安装和更新。适配器可以包括程序源代码的版本化部分。开发中程序代码和API可以被分叉为创建稳定接口的版本化快照。API和适配器的“开发中”版本可以与版本化API和适配器同时存在。可互操作程序,诸如不同浏览器应用可以为API的多个版本提供同时支持。兼容版本协商可以例如在进程启动期间发生。协商可以激活由两个程序支持的最高API版本。
下文参考附图详细描述了本发明的其他特征和优点以及本发明的各种实施例的结构和操作。应注意,本发明不限于本文中所描述的具体实施例。这种实施例仅出于说明目的而在本文中提出。附加实施例基于本文中所包含的教导而对(多个)相关领域的技术人员而言将为显而易见的。
附图说明
并入于本文中并且形成说明书的一部分的附图图示了本申请的实施例,并且与说明书一起进一步用于解释实施例的原理并且使得相关领域的技术人员能够制作和使用实施例。
图1是根据示例实施例的用于支持和协商跨多个产品的多个API版本的示例***的框图。
图2是根据示例实施例的用于支持和协商跨多个浏览器产品的多个API版本的示例浏览器***的框图。
图3是版本化适配器代码与非版本化代码之间的示例接口的框图。
图4是根据示例实施例的用于支持和协商跨多个产品的多个API版本的示例方法的流程图。
图5是根据示例实施例的用于支持和协商跨多个浏览器产品的多个API版本的示例方法的流程图。
图6是可以用于实施实施例的示例计算设备的框图。
本发明的特征和优点将根据下文结合附图阐述的详细描述而变得更加显而易见,在附图中,相同附图标记始终标识对应元件。在附图中,相同附图标号通常指示相同的、功能上类似的和/或结构上类似的元件。元件首次出现的图式由对应附图标号中的(多个)最左边的数字指示。
具体实施方式
I.介绍
本说明书和附图公开了并入本发明的特征的一个或多个实施例。本发明的范围不限于所公开的实施例。所公开的实施例仅仅例示了本发明,并且所公开的实施例的修改版本也由本发明涵盖。本发明的实施例由所附权利要求书限定。
每个实施例被呈现为本文中所公开和/或要求保护的主题的许多可能示例中的示例。说明书中对“一个实施例”、“实施例”、“示例实施例”等的引用指示所描述的实施例可以包括特定特征、结构或特点,但每个实施例可能并不一定包括特定特征、结构或特点。而且,这种短语并不一定指相同实施例。进一步地,当结合实施例描述特定特征、结构或特点时,可以认为,无论是否明确描述,结合其他实施例来实现这种特征、结构或特点在本领域的技术人员的知识范围内。
若干示例性实施例被描述如下。应注意,本文中所提供的任何章节/子章节标题不旨在作为限制。实施例贯穿本文进行了描述,并且任何类型的实施例都可以被包括在任何章节/子章节下。此外,在任何章节/子章节中所公开的实施例可以以任何方式与在相同章节/子章节和/或不同章节/子章节中所描述的任何其他实施例组合。
II.用于支持和协商跨多个产品的多个API版本的示例实施例
针对具有许多不同软件组合(例如各种版本和更新)的许多不同计算环境存在多对多版本兼容性问题。可互操作程序(例如操作***和/或应用)及其互操作性接口(例如应用编程接口(API))可以具有异步产品开发、更新、测试、版本化、发布、自托管和最终用户安装以及更新。例如,与应用和API更新相比,操作***更新可以不太频繁地发生。程序开发(例如从试点到完整发布)可以具有不同更新信道(例如每天、每周、每月)。自托管可能需要解密关于破坏性改变的各种通知以便找到兼容构建的正确组合,只有在另一程序在第二天、下一周等被更新时才会再次被破坏。
API可以包括例如两个组件(例如程序),这两个组件被配置为彼此通信(例如经由正式接口合约)。API可以包括通信方式(例如调用模式)。适配器可以包括例如应用二进制接口(ABI)。ABI可以是二进制模块之间的接口。COM接口可以包括ABI。ABI可以包括例如API外加关于组件如何在二进制级别上彼此通信的较低级别实施方式细节。这可以包括例如时序、存储器布局和调用约定。
API可以针对具有异步开发的可互操作程序而被版本化。例如,可以存在各种API版本化技术(例如在操作***中)。
应用开发者可以被激励以在尽可能多的OS版本(例如)上运行,同时利用新发布和更新中的新特征。这可以例如通过在运行时探测新API并且在特征不存在时回退至较旧API来完成。一些/>和C++相关的示例可以包括例如WinRT(例如运行时类激活)、COM(例如CoCreateInstance、QueryInterface、QueryService)和Win32(例如LoadLibrary和GetProcAddress)。
在本文中描述了用于支持和协商跨多个产品的多个(例如静态)API版本的方法、***和计算机程序产品。可互操作程序,诸如和Internet/>浏览器应用可以为API的多个版本提供同时支持。API和程序API适配器可以被版本化为管理异步开发的程序和API的兼容性,这些异步开发的程序和API可以在许多计算环境中被异步安装和更新。API可以针对具有异步开发的可互操作程序而被版本化。在一个示例中,每个程序中的源代码的一部分(例如小部分或子集)(例如也)可以被冻结(例如复制)以创建API的每一(例如适配器)侧的快照,该API对每个程序(例如/>和Internet/>)起作用。适配器可以包括程序源代码的版本化部分。开发中程序代码和API可以被分叉并且设置(例如标记)有版本编号,以创建稳定接口的版本化快照。API和适配器的“开发中”版本可以与版本化API和适配器同时存在。兼容版本协商可以例如在进程启动期间发生。协商可以激活例如在/>选项卡(Tab)处于Internet/>模式下时支持的最高API版本。
A.用于支持和协商跨多个产品的多个API版本的示例***
图1是根据示例实施例的用于支持和协商跨多个产品的多个API版本的示例***的框图。示例***100可以包括任何计算环境。计算环境可以包括任何数量和类型的计算设备以及计算设备之间的任何数量和类型的通信路径(例如本地连接和/或一个或多个有线或无线网络)。示例计算设备被呈现于图6中。示例***100可以包括第一程序102、第二程序104和应用编程接口(API)136。第一程序102和第二程序104可以被设计和/或适配为例如使用一个或多个API(诸如API 136)进行交互。第一程序102、第二程序104和API 136可以被异步开发。
API 136可以包括任何类型的接口(例如组件对象模型(COM)接口、Mojo接口等)。接口定义可以例如在接口定义语言(IDL)文件中被提供。在一个示例中,API 136可以包括应用二进制接口(ABI)。API 136可以被开发,例如以支持程序(例如第一程序102和第二程序104)之间的互操作性。例如,API 136可以被修改为适配于第一程序102和第二程序104中的一个或多个程序的变化。例如,第一程序102和/或第二程序104可以随着时间流逝而添加新特征。API 136可以被修改为支持新特征。API可以是版本化接口。在一个示例中,例如当测试确定API 136在第一程序102和第二程序104的一个或多个版本之间提供稳定接口时,API 136可以被(例如周期性地)分叉和版本化。分叉创建副本(例如快照),其在特定开发阶段可以被冻结为开发中版本的版本。在示例(例如如图1中所示出)中,API 136可以包括一个或多个版本,例如开发中(indev)版本、版本1(v1)、v2、v3等。
第一程序102可以包括任何类型的程序(例如应用、操作***)。第一程序102可以包括例如API版本未感知(例如非版本化)代码110和API版本感知(例如版本化)代码,诸如第一API适配器114。第一API适配器114可以例如隔离或缓冲来自接口特定通信及其改变的API版本未感知代码110。第一API适配器114和API版本未感知代码110可以例如经由进程内通信138进行通信。在一个示例中,API版本感知代码可以包括数百到数千行代码,而非版本化代码可以包括数十万到数百万行代码。第一API适配器114可以包括ABI,例如如图1中的非限制性示例所示出。虽然第一API适配器114及其版本可以是第一程序102的一部分或结合第一程序102开发,但第一API适配器114可以(例如在第一程序102与第二程序104之间的交互期间)保留在第一程序102中或可以由另一组件(例如API 136和/或第二程序104)访问和加载。
第一API适配器114可以是版本化的。在一个示例中,例如,当测试确定API 136在第一程序102和第二程序104的一个或多个版本之间提供稳定接口时,第一API适配器114可以被(例如周期性地)分叉和版本化。分叉创建副本(例如快照),其在特定开发阶段可以被冻结为开发中版本的版本。在示例(例如如图1中所示出)中,第一API适配器114可以包括一个或多个版本,例如开发中(indev)ABI版本118、ABI版本1(v1)120、ABI v2(未示出)、ABIv3 122、ABI v4 124等。一些版本可以是不可用的(例如已启用或已移除),诸如所示出的示例中的v2。
第一程序102可以使用任何数量的版本和更新来开发,这可以独立于第二程序104的开发、版本和更新。第一程序102的任何版本可以在计算环境中被安装和更新。在各种示例中,可以存在数百、数千、数百万或数十亿的安装,这些安装中的许多安装具有第一程序102的不同版本和/或更新。因此,第一程序102的各种安装(例如具有第一API适配器114的各种版本)可以与API 136的各种(例如一个或多个)版本兼容。分析(例如协商)可以被执行以确定哪个(些)API版本与第一程序102兼容。
API版本协商器可以是单机的(例如独立于第一程序102)或与第一程序102集成。在(例如集成的)示例中,API版本未感知代码110可以包括例如第一版本协商器106。第一版本协商器106可以是例如非版本化的。第一版本协商器106可以与第二程序104中的对应版本协商器(例如第二版本协商器108)进行通信。例如,当第一程序102和/或第二程序104需要交互(例如通信、托管等)时,第一版本协商器106可以被触发(例如调用)。第一版本协商器106可以例如通过通信信道134(例如管线)与对应版本协商器进行通信。通过通信信道134进行的通信可以基于可以由(例如非版本化)API指定的协议。
第二程序104可以包括任何类型的程序(例如应用、操作***)。第二程序104可以包括例如API版本未感知(例如非版本化)代码112和API版本感知(例如版本化)代码,诸如第二API适配器116。第二API适配器116可以例如隔离或缓冲来自接口特定通信及其改变的API版本未感知代码112。第二API适配器116和API版本未感知代码112可以例如经由进程内通信140进行通信。在一个示例中,API版本感知代码可以包括数百到数千行代码,而非版本化代码可以包括数十万到数百万行代码。第二API适配器116可以包括ABI,例如如图1中的非限制性示例所示出。虽然第二API适配器116及其版本可以是第二程序104的一部分或结合第二程序104开发,但第二API适配器116可以(例如在第一程序102与第二程序104之间的交互期间)保留在第二程序104中或可以由另一组件(例如API 136和/或第一程序102)访问和加载。
第二API适配器116可以是版本化的。在一个示例中,例如,当测试确定API 136在第一程序102和第二程序104的一个或多个版本之间提供稳定接口时,第二API适配器116可以被(例如周期性地)分叉和版本化。分叉创建副本(例如快照),其在特定开发阶段可以被冻结为开发中版本的版本。在示例(例如如图1中所示出)中,第二API适配器116可以包括一个或多个版本,例如开发中(indev)ABI版本126、ABI版本1(v1)128、ABI v2 130、ABI v3132等。在所示出的示例中,ABI v3 132是第二API适配器116已知、存在于第二API适配器116上或可用于第二API适配器116的最高版本(例如除开发中ABI 126以外)。一些版本可以是不可用的(例如已启用或已移除)。
第二程序104可以使用任何数量的版本和更新来开发,这可以独立于第一程序102的开发、版本和更新。第二程序104的任何版本可以在计算环境中被安装和更新。在各种示例中,可以存在数百、数千、数百万或数十亿的安装,这些安装中的许多安装具有第二程序104的不同版本和/或更新。因此,第二程序104的各种安装(例如具有第二API适配器116的各种版本)可以与API 136的各种(例如一个或多个)版本兼容。分析(例如协商)可以被执行以确定哪个(些)API版本与第二程序104兼容。
API版本协商器可以是单机的(例如独立于第二程序104)或与第二程序104集成。在(例如集成的)示例中,API版本未感知代码112可以包括例如第二版本协商器108。第二版本协商器108可以是例如非版本化的。第二版本协商器108可以与第一程序102中的对应版本协商器(例如第一版本协商器106)进行通信。例如,当第二程序104和/或第一程序102需要交互(例如通信、托管等)时,第二版本协商器108可以被触发(例如调用)。第二版本协商器108可以例如通过通信信道134(例如管线)与对应版本协商器进行通信。通过通信信道134进行的通信可以是基于可以由(例如非版本化)API指定的协议的。
在一个示例中,第一程序102或第二程序104可以发起协商触发和/或对协商触发作出响应。版本协商可以例如在交互会话之前(例如在交互会话开始时)被发起。第一程序102和/或第二程序104可以生成和/或接收事件通知,该事件通知触发第一程序102、第二程序104和/或API 136的配置以用于进行交互。例如,第一程序102可以确定其需要与第二程序104交互。例如,当第二程序104尚未运行时,第二程序104可以被实例化(例如由第一程序102)。通信信道134可以例如针对第一程序102与程序104之间的初始通信(例如用于版本协商、加载、初始化等)而被实例化。
版本协商可以由第一版本协商器106或第二版本协商器108发起。例如,API版本未感知代码110可以使第一版本协商器106向第二版本协商器108查询所支持的API版本。第一版本协商器106和第二版本协商器108中的协商逻辑可以被配置为例如查询/响应所支持的API版本。在一个示例中,第一API适配器114和第二API适配器116可以指定所支持的版本。发起协商器可以查询例如所支持的版本的列表、所支持的特定版本、所支持的最高版本等,并且响应协商器可以对例如所支持的版本的列表、所支持的特定版本、所支持的最高版本等作出响应。例如,版本查询/响应可以是迭代的。
版本协商选定(settle on)(例如确定或选择)第一API适配器114、第二API适配器116和API 136的(多个)相互兼容版本。在示例协商中,可以存在API 136的(例如潜在地不连续的或有限的)K个可能版本、第一API适配器114的M个可能版本和第二API适配器116的N个可能版本。包括第一程序102和第二程序104的每个计算环境在兼容版本上可以不同。API136、第一API适配器114和第二API适配器116的开发中版本例如基于程序设置和/或配置而在版本协商期间可以是或可以不是可选择的。开发中版本可以(例如备选地)被访问,例如通过(例如命令行)覆盖。
在示例(例如如图1中所示出)中,版本3是第一程序102与第二程序104之间经由API 136的兼容性的最高版本。协商或其他逻辑可以激活API 136、第一API适配器114和第二API适配器116的所选择的兼容版本(例如使该所选择的兼容版本实例化和初始化)。交互(例如通信)可以使用API 136、第一API适配器114和第二API适配器116的激活版本在第一程序102与第二程序104之间发生。在示例(例如如图1中所示出)中,第一程序102与第二程序104之间的通信可以使用API 136、第一API适配器114和第二API适配器116的版本3通过通信管线142发生。
图1呈现了支持和协商跨多个产品的多个(例如静态)API版本的许多可能示例中的一个可能示例。其他实施方式可以不同。更具体的示例(例如许多可能的实施方式中的一种实施方式)参考图2中所示出的web浏览示例来呈现。
多对多版本兼容性问题的示例和示例解决方案相对于web浏览而被呈现。网站可以与不同web浏览器兼容。一些较旧(遗留)网站可以与较旧web浏览器(例如Internet/>web浏览器)兼容,而较新网站可以与较新web浏览器(例如/>web浏览器)兼容。单个企业可以具有较旧网站与较新网站的组合,这可能需要双浏览器解决方案(例如Internet/>和/>)。Internet/>与/>操作***集成。Internet/>的最新版本是版本11,其可以例如在/>操作***版本7、8、10和12中为可用的。信息技术(IT)管理员可以例如通过创建需要Internet的遗留网站的列表来管理网站和浏览器兼容性问题。这种列表可以用于决定哪个浏览器在用户在网站之间进行导航时打开。该解决方案在web“冲浪”的单一功能期间在两个不同程序之间交替。因此,每个程序的外观和感觉是不同的。用户对每个程序等具有不同设置和喜好。
例如,可以被改进以绘制当前和遗留网站。在一个示例中,第一程序(例如)可以(例如根据需要)托管第二程序(例如Internet/>)以无缝地绘制当前和遗留页面(例如对于具有相同外观和感觉的用户透明)。例如,/>可以具有Internet/>模式,其中/>(绘制引擎本身)托管Internet/>(例如作为嵌套绘制引擎)以绘制遗留web页面。这可以被称为例如双引擎浏览器。
双引擎浏览器可以改善在当前和遗留网站上冲浪时的最终用户体验。例如,遗留和其他web页面可以被呈现于具有公共外观、用户设置、喜好和现代特征的公共浏览器中。浏览器引擎转换对于用户而言可以是无缝的。
双引擎浏览器中的和Internet/>互操作性可以例如由通过一个或多个API(例如COMN 218)交互的/>和Internet/>来实施。在一个示例中,Internet/>可以被修改为暴露/>与Internet/>之间的API。可以例如通过在Internet/>浏览器(例如由CBrowserFrame表示)顶部添加一组API来托管Internet/>双引擎浏览器可以涉及/>与Internet进程之间例如通过一组API(例如静态类型的API,诸如C++)的通信。
异步开发的Internet/>和一个或多个API的互操作性可以导致/>和Internet/>在许多不同计算环境中的许多不同安装的多对多版本兼容性问题。例如,被实施为/>操作***的一部分的Internet/>可以在长前置时间的情况下按/>操作***发布和更新的节奏被发布和更新。可以支持/>操作***的多个版本(例如从/>7开始),这些版本分别具有其自身的服务管线。/>可以具有多个更新信道,这些更新信道分别按其自身的节奏(例如每天、每周、每月)推出。客户(例如企业、个人)可以选择推迟/>和/或/>的更新。双浏览器引擎开发可以产生API中的快速(例如每天数次)迭代以及对/>和Internet/>的协调改变。
以各种方式被安装在许多计算环境中的的X版本和更新以及Internet的Y版本和更新可以例如通过版本化API(例如COM)和API边界的每一侧的适配器来进行支持。适配器的源代码可以与来自/>Internet/>和API的开发中版本的API定义一起(例如自动或半自动)分叉以创建双引擎浏览器的稳定版本。API的“开发中”版本可以与版本化API同时存在。Internet/>和/>可以为API的多个版本提供同时支持。
图2是根据示例实施例的用于支持和协商跨多个浏览器产品的多个API版本的示例浏览器***的框图。示例***200可以包括任何计算环境。计算环境可以包括任何数量和类型的计算设备以及计算设备之间的任何数量和类型的通信路径(例如本地连接和/或一个或多个有线或无线网络)。示例计算设备被呈现于图6中。
示例***200可以包括例如双浏览器引擎。示例***200可以包括例如第一web浏览器应用202(例如)和第二web浏览器应用204(例如Internet/>)。在一个示例中,第一web浏览器应用202和第二web浏览器应用204可以例如使用一个或多个版本化API(诸如版本化COM接口(例如COMN 218,其中N可以指示COM接口的版本编号)进行交互。
第一web浏览器应用202可以包括例如Edge适配器206和其他逻辑,例如IE会话托管(IESessionHost)、IE选项卡托管(IETabHost)和Edge特征。第一web浏览器应用202的其他部分可以出于清晰起见而未被示出。第一web浏览器应用202可以包括版本化和非版本化的逻辑。第一web浏览器应用202的逻辑(例如代码)的API版本感知(版本化)部分可以包括例如Edge适配器206。第一web浏览器应用202的非版本化逻辑可以包括例如IE会话托管、IE选项卡托管和特征。第一web浏览器应用202的版本化和非版本化部分可以通过接口210进行通信,该接口可以包括Mojo接口。第一web浏览器应用202可以包括可执行文件(例如msedge.exe)。
IE会话托管可以包括表示会话的Edge代码(例如在Mojo边界的Edge侧)。IE会话托管可以与其他Edge代码进行通信。会话可以是基于用户简档。在一个示例中,可以存在一个用户简档。在一个示例中,可以存在多个用户简档(例如家庭、工作简档),这可以导致多个会话,针对每个会话具有一个或多个选项卡(例如在单个Edge窗口中)。在(例如另一)示例中,InPrivate/Incognito浏览可以创建单独会话。在(例如Internet Explorer模式的)示例中,(例如每个)会话可以映射至Internet的单独实例。
例如,当第一web浏览器应用202处于Internet Explorer模式时,IE选项卡托管可以包括表示Internet Explorer选项卡的Edge代码。
Edge特征可以包括Edge代码,该Edge代码可以例如通过IE会话托管、IE选项卡托管和对应回调与Internet Explorer模式选项卡交互。
Edge适配器206可以包括版本化适配器。Edge适配器206可以例如提供第一接口(例如Mojo)与第二接口(例如COM接口,诸如COMN 218)之间的网桥。Mojo接口210可以被实施在第一web浏览器应用202与Edge适配器206之间。在一个示例中,Mojo可以是非版本化的,而COM可以是版本化的。Edge适配器206可以例如被实施为动态链接库(DLL)文件(例如dual_engine_adapter.dll)。例如,当第二web浏览器应用204被实例化时,Edge适配器206可以被加载到第二web浏览器应用204中。Edge适配器206可以包括一个或多个适配器或适配器组件(例如DESessionImpl和DETabImpl)。Edge适配器206组件(例如DESessionImpl和DETabImpl)可以与Internet Explorer适配器208组件(例如CDEBrowserSession和CDEBrowserCoupling)进行通信。
在一个示例中,Edge适配器206可以“消耗”Internet Explorer适配器208。Edge适配器206可以使用类似战略(例如观察者和委托)来消耗API(例如COMN 218)并且实施回调。在一个示例中,这可以导致针对每个版本的单独DETabImpl实现。
第二web浏览器应用204可以包括例如Internet Explorer适配器208和其他逻辑,例如CBrowserFrame。第二web浏览器204的其他部分可以出于清晰起见而未被示出。第二web浏览器应用204可以包括版本化和非版本化的逻辑。第二web浏览器应用204的逻辑(例如代码)的API版本感知(版本化)部分可以包括例如Internet Explorer适配器208。非版本化Internet Explorer逻辑可以包括例如CbrowserFrame和其他对象。第二web浏览器应用204的版本化和非版本化部分可以通过接口214进行通信,该接口可以包括C++接口。第二web浏览器应用204可以包括可执行文件(例如iexplore.exe)。
CBrowserFrame可以逻辑地表示顶级Internet Explorer窗口,该InternetExplorer窗口可以例如在Edge Internet Explorer模式下逻辑地映射至Edge选项卡。CTabWindowManager可以包括给定Internet Explorer窗口的所有选项卡。在EdgeInternet Explorer模式的示例中,可以存在一个选项卡。CTabWindow可以包括“管理器进程”中的表示选项卡的对象。CShellBrowser2可以包括“内容进程”中的表示选项卡的顶部对象。CDoc可以包括Internet Explorer浏览器引擎中的顶部对象(例如mshtml.dll)。
Internet Explorer适配器208可以包括多个适配器对象(例如DEBrowserSession和DEBrowserCoupling)。适配器对象可以在Edge Internet Explorer模式下支持InternetExplorer会话和选项卡。Internet Explorer适配器208可以例如经由COM接口与Edge适配器206交互,该COM接口可以是版本化的(例如COMN 218)Internet Explorer适配器208可以由Edge适配器206(例如dual_engine_adapter.dll)调用。Internet Explorer适配器208可以调用回调。浏览器会话可以包括(仅包括一个)Internet Explorer适配器208的“活动”版本。
在一个示例中,API(例如在接口定义方面)可以在API的每一侧与对应适配器程序代码一起分叉。这可以绘制版本特定的不同程度的实施方式行为。适配器代码可以帮助将其余(例如大量的)程序代码与逻辑版本特定的行为差异隔离。
版本化API和适配器可以例如支持对API的逻辑破坏性改变。在一个示例中,IDEBrowser::Navigate可以被修改为采用可以影响回调行为的附加或不同参数,诸如
IDEBrOwserObserver::OnNavigationCompleteIDEBrowserObserver::OnDocumentCompleteIDEBrowserObserver::OnNavigationFailed
例如,当两个组件(例如程序)都支持新API版本时,API和适配器可以被分叉为单元,这可以保留先前行为,而新行为可以变成可操作的。一些版本特定的行为可以超出适配器代码一直到程序中的其他代码,但是该途径可以限制影响并且使在新功能性被发布时回归较旧API版本的风险最小化。
Edge适配器206和Internet Explorer适配器208可以是版本化的,例如与版本化API一致。支持可以同时为多个程序和API的多个版本提供。Edge适配器组件和InternetExplorer适配器组件(连同COM API)可以在版本化快照中被分叉并且冻结,这可以提供1:1基数。例如,分叉可以通过将开发中API复制到下一个可用版本编号来完成。开发中版本可以是例如未编号的版本1等。版本编号可以按使开发中版本冻结和分叉的时间顺序增加。版本可以随着时间流逝而被添加和移除,例如以创建兼容版本的窗口。API可以在运行时被协商(例如由兼容版本协商)。
与分叉的API和适配器相关联的版本编号可以例如单调地增加,这可以允许使用相同编号标记对应接口。例如,取决于第一web浏览器应用202和第二web浏览器应用204的安装版本和更新,在第一web浏览器应用202和/或第二web浏览器应用204所支持的版本编号方面可以存在间隙。开发中版本和已发布版本可以同时存在。第一web浏览器应用202可以被配置为覆盖已发布版本,例如以使用开发中版本(例如用于开发和测试)。选择使用开发中API的开发者可以与用于第一web浏览器应用202和第二web浏览器应用204的二进制匹配以实现兼容性。该途径可以允许第一web浏览器应用202和第二web浏览器应用204在运行时针对兼容API进行协商的情况下在跨不同操作***的不同发布时间表上被独立地修改。该途径可以在迭代API的开发中版本时适应自托管双引擎功能性。开发者可以在不承受过去实施方式的负担或预测未来实施方式的情况下实施API。例如,开发者可以在不创建COM接口的新IFoo3、IFoo4版本或担心因添加或改变方法及其参数而导致的破坏性改变的情况下开发API。
在示例实施方式中,可以存在多个API(例如COM API和Mojo API)。实施方式可以使一个或多个API版本化。在一个示例中,COM接口可以是版本化API(例如COMN 218)。COM接口定义可以例如被提供在文件(例如DE.idl)中。COM接口定义可以包括例如非版本化的开发中API和非版本化的开发中API的各种版本化API分支。COM可以是基于C++虚函数表。COM可以例如使用sdcall调用约定。使用这些约定的应用可以例如用Visual Basic、C#、Python等编写,并且可以在不访问源代码的情况下使用用C++编写的COM对象,例如,这是因为明确指定的ABI(与实施方式语言无关)可以是语言中立的。
Mojo接口可以包括非版本化API(例如Mojo接口210)。Mojo定义可以是非版本化的。Mojo接口定义可以例如被提供在文件(例如dual_engine.mojom)中。在许多其他示例实施方式中的一种示例实施方式中,Mojo可以是版本化的,而COM可以是非版本化的。
Edge适配器206和Internet Explorer适配器208可以包括COM接口(例如COMN218)。(例如每个)适配器可以包括一个或多个适配器(例如文件、组件或对象)。Edge适配器206可以包括例如DEN_TabImpl和DEN_SessionImpl对象,其中N表示Edge适配器206的版本。Internet Explorer适配器208可以包括例如DEN_BrowserCoupling和DEN_BrowserSession,其中N表示Internet Explorer适配器208的版本。
适配器(例如程序代码的版本化部分)可以涵盖回调。版本化代码可以包括例如Edge适配器206、Internet Explorer适配器208和回调(例如IDEN_BrowserObserver、IDEN_BrowserSessionObserver)。
API和/或适配器可以具有任何结构(例如扁平的、阶层式的)在一个示例中,API和/或适配器可以是阶层式的,例如
在操作期间的示例过程中,web浏览器(例如第一web浏览器应用202)可以访问与第二web浏览器应用204兼容但不与第一web浏览器应用202兼容的网站。第一web浏览器应用202可以发起Internet Explorer模式(例如将Edge用户界面选项卡切换到InternetExplorer模式)。在示例(例如针对开发中API)中,初始IDE_BrowserSession可以被取回作为与Mojo的初始握手的一部分。其可以作为IUnknown被返回,调用者可以向其查询接口的预期版本。IDE_BrowserSession可以实施用于创建基于IDE_Browser的对象的过程。这些对象可以表示被托管为选项卡的框架。子对象可以与其父对象一致地被版本化。
在一个示例中,进程间版本选择(例如Edge版本选择和IE版本选择)可以例如通过通信路径216)在Edge适配器206与Internet Explorer适配器208之间执行版本协商,以确定API的哪个版本(例如版本化COM接口COMN)用于Internet Explorer模式。例如,当Internet Explorer进程(例如第二web浏览器应用204)被启动(例如由第一web浏览器应用202)时,版本协商可以发生。协商可以例如从第一web浏览器应用202已知的API的最新版本开始。协商可以(例如当版本不被第二web浏览器应用204支持时)回滚到较早版本,直至兼容版本被找到为止。在一个示例中,版本协商可以从第一web浏览器应用202已知的最高级别开始并且减量到版本2,从而排除开发中版本(例如未编号或版本1)。开发者、自托管用户、测试者等可以被提供一个或多个过程以使用一个或多个程序配置(例如选择和/或版本协商覆盖)来访问开发中的版本。
Edge版本选择可以感知(aware)Edge适配器组件(例如DEN_SessionImpl和DEN_TabImpl)的可用版本。IE版本选择可以例如感知或可以搜索Internet Explorer适配器208、组件DEN_BrowserSession和DEN_BrowserCoupling以确定可用版本(例如最高版本)。Edge版本选择可以发起协商(例如使用查询)并且IEVersionNegotiation可以作出响应。协商可以选定可用于Edge适配器206和Internet Explorer适配器208中的最高API版本。在示例中(例如如图2中所示出),版本4可以是第一web浏览器应用202和第二web浏览器应用204相互识别的最高兼容版本。
在协商期间确定的兼容版本可以被激活。例如,兼容版本中的对象可以被实例化并且初始化。在一个示例中,Edge版本选择可以例如激活(例如实例化)IDE4_SessionImpl和IDE4_TabImpl,并且IE版本选择可以激活IDE4_BrowserSession和IDE4_BrowserCoupling。第一web浏览器应用202和第二web浏览器应用204可以使用COM接口COM4212的激活的兼容版本通过Edge适配器206和Internet Explorer适配器208的激活版本进行通信。实例化的版本化适配器可以参与版本化握手,例如以开始正常操作。
API和适配器版本选择(例如协商和实例化)可以例如由非版本化的初始会话回调接口实施,该初始会话回调接口可以包括一个或多个API和宏。在一个示例中,版本协商可以发生在适配器外部(例如经由非COM API)。例如,当第二web浏览器应用204加载Edge适配器206(例如dual_engine_adapter.dll)时,版本协商可以首先发生。版本协商可以发生,例如从其支持的最高版本开始,并且如果不支持,那么降到较旧版本。正在寻找和返回的接口在编译时可以是未知的。在协商期间返回的所请求的浏览器会话可以是例如IDEN_BrowserSession。查询可以寻找预期版本(例如4)。在一个示例中,IDE4BrowserSession可以由CDE4BrowserSession实施。适配器对象(例如在COM API的每一侧)可以在协商之后按需实例化。例如,CDE4BrowserCoupling可以响应于对IDEBrowserSession::CreateDEBroWser的调用而被创建。(例如每个)IDEBrowser可以表示Edge中的IE模式选项卡。调用可以针对每个新IE模式选项卡发生。
在一个示例中,初始化和版本选择可以由第一web浏览器应用202执行。例如,协商可以通过API发生如下:
DualEngineSessionImpl::EnsureSession可以例如调用DualEngineSessionClient::GetVersionedBroWserSession(例如在Internet Explorer侧)。例如,当指定版本不被第二web浏览器应用204支持时,GetVersionedBrowserSession可以返回错误(例如ERROR_NOT_SUPPORTED)。调用者可以使用其他版本重试。支持可以(例如根据需要)例如由IsSupportedByDEInterfaceVersion、GetDEInterfaceVersion和/或INVOKE_VERSIONED_COUPLING_CALLBACK提供。
示例实施方式可以发生在一个或多个本地或分布式计算设备上。在一个示例中,第一计算设备可以执行对应于第一web浏览器应用202的进程,而第二计算设备可以执行对应于第二web浏览器应用204的进程。
在一个示例中,协商过程可以被远程地选择。API(例如ABI)和/或一个或多个适配器可以被远程地选择、访问和/或下载(例如下载至一个或多个计算设备)。API和/或适配器代码(例如针对任一程序)可以位于与其他(例如非版本化)程序代码和/或适配器代码的其他版本相同或不同的模块中。
版本协商协议可以例如在协商之前ping服务器(例如私有或公共)以确定是否存在对协商逻辑、API的可用性和/或适配器版本和/或更新的改变,这可以例如改变协商逻辑、排除版本、改变要求、下载更新等。
注册表项可以被设置为例如指示第二web浏览器应用204的安装版本是否被配置为与第一web浏览器应用202集成。特征可以在第一web浏览器应用202和第二web浏览器应用操作***中以不同速率变成可用的。兼容的、所支持的功能性可以变成可操作的,而不受支持的特征可以被隐藏。特征查询可以查询特征是否被支持。在一个示例中,查询可以询问特征(诸如菜单项(例如打印))是否被支持。特征可以例如基于这种能力查询而被显示或隐藏。
图3是版本化适配器代码与非版本化代码之间的示例接口的框图。图3示出了版本化Internet Explorer适配器208与第二web浏览器应用204(例如CbrowserFrame)中的非版本化逻辑之间的示例接口300。通常,图3示出了类图的示例。更详细地,图3示出了InternetExplorer适配器208中的适配器或适配器组件(DEN_BrowserCoupling)的示例,该适配器或适配器组件具有使用两种不同(例如版本特定的)耦合(例如_coupling1和_coupling2)而耦合至非版本化代码(例如CBrowserFrame)(例如被配置为与非版本化代码(例如CBrowserFrame)进行通信)的两种不同版本(例如CDEBrowserCoupling和CDE2BrowserCoupling)。InternetExplorer适配器208的部分(例如DEN_Browser)可以被称为适配器、组件、对象等。
版本化Internet Explorer适配器208可以在暴露的API(例如版本化COM接口COMN218)与其他(例如非版本化)程序代码(诸如CBrowserFrame等)之间提供绝缘层。版本化Internet Explorer适配器208可以包括一个或多个版本化适配器或适配器组件(例如CDEBrowserSession和CDEBrowserCoupling),该版本化适配器或适配器组件可以包括卫星COM对象(例如将非版本化代码与版本化COM API隔离)。Internet Explorer适配器208对象可以减少修改(例如并且因此,保留非版本化)复杂类(诸如CbrowserFrame)以支持IDEN_Browser等的需要。
DEN_BrowserCoupling(其可以被称为卫星适配器)可以包括用于补偿API的不同版本(例如COMN 218)与适配器的不同版本(例如Edge适配器206、Internet Explorer适配器208)之间的差异的逻辑(例如卫星对象)。卫星适配器可以缓冲/隔离浏览器引擎实施方式与预测API(例如COM接口COMN 218),这可以防止API的新版本中的改变泄露到较旧版本中。
不同接口版本可以被实施在不同对象中。Internet Explorer适配器208可以包括例如CDN_BrowserCoupling的不同版本(例如CDEBrowserCoupling和CDE2BrowserCoupling),该CDN_BrowserCoupling可以用于在不必重命名方法的情况下实施API COMN 218的不同版本。
Internet Explorer适配器208(例如和适配器组件)的(例如每个)版本可以具有其自己的COM接口的版本和单独实现文件。耦合保持器可以针对所支持的版本保持耦合。保持器和耦合可以具有与CBrowserFrame相同的使用寿命。
耦合保持器的不同版本可以支持浏览器耦合对象(例如CDEBrowserCoupling和CDE2BrowserCoupling)的不同版本的创建和管理。耦合保持器可以是来自其他浏览器代码的回调的管道。耦合宏可以最小化或消除适配器外部的版本感知代码。
CBrowserFrame对象可以在耦合保持器中实施多种耦合,例如_coupling1、_coupling2等。在一个示例中,可以存在N种耦合,Internet Explorer适配器208中的IDEN_BrowserCoupling的N个版本中的每个版本都具有一种耦合。浏览器耦合可以被实施在耦合保持器下的层次结构中。例如,
在一个示例中,在接口(例如IDE4Browser)与CDE4BrowserCoupling中的实施方式之间可以存在1:1映射。分叉实施方式可以支持各种场景中的向后兼容性,同时准许快速迭代。
Internet Explorer适配器208对象的不同版本(例如CDEBrowserCoupling和CDE2BrowserCoupling)可以实施相同和不同(例如附加)方法(例如以实施API的不同版本,诸如COM接口)。
IDEN_Browser与CBrowserFrame之间的合约(例如经由通信管道214)可以是非版本化C++,这可以简化改变方法签名以添加可选参数等,同时保持兼容性。
B.用于支持和协商跨多个产品的多个API版本的示例方法
实施例还可以被实施在进程或方法中。例如,图4是根据示例实施例的用于支持和协商跨多个产品的多个API版本的示例方法的流程图。本文中所公开的实施例和其他实施例可以根据方法400来操作。方法400包括步骤402和步骤414。然而,其他实施例可以根据其他方法来操作。其他结构和操作实施例将基于对实施例的前述讨论而对(多个)相关领域的技术人员而言是显而易见的。除非明确指出或固有要求,否则不需要步骤顺序。不存在方法实施例实施图4中所图示的所有步骤的要求。图4仅为许多可能实施例中的一个可能实施例。实施例可以实施更少、更多或不同的步骤。
方法400从步骤402开始。在步骤402中,(i)第一程序(例如具有第一API适配器)的开发中版本、(ii)第二程序(例如具有第二API适配器)的开发中版本和(iii)API的开发中版本可以被(例如异步)开发。例如,如图1中所示出,第一程序102(具有第一API适配器114)、第二程序104(具有第二API适配器116)和API 136可以被(例如异步)开发。
在步骤404中,第一API适配器的稳定开发中版本、第二API适配器的稳定开发中版本和API的稳定开发中版本可以被分叉和版本化,以创建第一API适配器、第二API适配器和API的除了开发中版本和先前版本之外的新版本。例如,如图1中所示出,第一API适配器114、第二API适配器116和API 136的开发中版本可以被分叉和版本化,以创建要添加至现有/先前版本1和2的版本3。
在步骤406中,第一程序(例如包括第一API适配器的一个或多个版本)和第二程序(例如第二API适配器的一个或多个版本)可以在计算环境中被安装和/或更新。例如,如图1中所示出,第一程序102和第二程序104可以在由示例***100表示的计算环境中被安装和/或更新(例如以相同或不同的时间或速率)。
在步骤408中,触发将第一程序配置为在计算环境中与第二程序交互的事件可以被接收。例如,如图1中所示出,第一程序102(例如API版本未感知代码110)可以接收触发第一版本协商器106发起与第二版本协商器108的API版本协商的事件。参考图2,接收事件可以包括例如第一web浏览器应用202(例如)导航至被确定为与其不兼容的web页面。
在步骤410中,API的兼容版本、第一API适配器的兼容版本和第二API适配器的兼容版本分别选自API的K个版本、第一API适配器的M个版本、以及第二API适配器的N个版本中。例如,如图1中所示出,第一版本协商器106可以与第二版本协商器108协商以选择API136的兼容版本、第一API适配器114的兼容版本和第二API适配器116的兼容版本。如图1中所示出,所选择的兼容版本是版本3。
在步骤412中,API、第一API适配器和第二API适配器的所选择的兼容版本可以被激活。例如,如图1中所示出,所选择的API v3、ABI版本3快照122和ABI版本3快照132可以被激活。
在版本414中,第一程序和第二程序可以使用激活的API、第一API适配器和第二API适配器进行交互(例如通信)。例如,如图1中所示出,第一程序102(例如API版本未感知代码110)可以经由活动API v3、ABI版本3快照122和ABI版本3快照132与第二程序104(例如API版本未感知代码112)交互。
图5是根据示例实施例的用于支持和协商跨多个浏览器产品的多个API版本的示例方法的流程图。本文中所公开的实施例和其他实施例可以根据方法500来操作。方法500包括步骤502和步骤522。然而,其他实施例可以根据其他方法来操作。其他结构和操作实施例将基于对实施例的前述讨论而对(多个)相关领域的技术人员而言是显而易见的。除非明确指出或固有要求,否则不需要步骤顺序。不存在方法实施例实施图5中所图示的所有步骤的要求。图5仅为许多可能实施例中的一个可能实施例。实施例可以实施更少、更多或不同的步骤。
方法500从步骤502开始。在步骤502中,第一浏览器可以导航至与第一浏览器不兼容但与第二浏览器兼容的web页面。例如,参考图2,第一web浏览器应用202(例如)可以导航至与第一web浏览器应用202不兼容但与第二web浏览器应用204(例如Internet)兼容的web页面。
在步骤504中,第一浏览器可以使第二浏览器实例化。例如,参考图2,第一web浏览器应用202(例如)可以使第二web浏览器应用204(例如Internet/>)实例化。
在步骤506中,第二浏览器可以加载第一API适配器。例如,如图2中所示出,第二web浏览器应用204(例如Internet)可以加载Edge适配器206。
在步骤508中,通信可以被建立。例如,如图2中所示出,Edge版本选择可以通过通信路径216与IE版本选择通信。
在步骤510中,版本协商可以从第一浏览器感知的最大(最大)版本N开始。例如,参考图2,Edge版本选择可以查询IE版本选择是否与第一web浏览器应用202感知的最高版本N兼容。
在步骤512中,第二浏览器可以确定其是否支持版本N。例如,如图2中所示出,IE版本选择可以对指示其是否支持版本N的查询作出响应。与版本N的不兼容性可以导致步骤514,而兼容性可以导致步骤516。
在步骤514中,N可以被减小。例如,参考图2,Edge版本选择可以对由IE版本选择做出的其与版本N不兼容的指示作出响应。
在步骤516中,兼容ABI快照在第一浏览器和第二浏览器中被实例化。例如,参考图2,Edge版本选择和IE版本选择可以通过使Edge适配器206的版本4和Internet Explorer适配器208的版本4实例化来对由IE版本选择做出的其与版本N(例如版本4)兼容的指示作出响应。
在步骤518中,对经实例化适配器的初始化可以发生。例如,参考图2,Edge版本选择可以初始化Edge适配器206对象DE4_SessionImpl和DE4_TabImpl,并且IE版本选择可以初始化Internet Explorer适配器208对象DE4_BrowserSession和DE4_BrowserCoupling以用于通过COM4 API进行通信。
在步骤520中,web页面可以利用第二浏览器应用被处理。例如,参考图2,第二web浏览器应用204(例如Internet)可以处理Internet Explorer兼容web页面。
在步骤522中,web页面可以被呈现于第一浏览器应用的用户界面中。例如,参考图2,由第二web浏览器应用204(例如Internet)处理的web页面可以被呈现于第一web浏览器应用204(例如/>)的浏览器接口选项卡中。
III.示例计算设备实施例
本文中所描述的***可以一起被实施在SoC中。在一个示例中,SoC可以包括集成电路芯片,该集成电路芯片包括以下一项或多项:处理器(例如中央处理单元(CPU)、微控制器、微处理器、数字信号处理器(DSP))、存储器、一个或多个通信接口和/或其他电路,并且可以(例如可选地)执行接收到的程序代码和/或包括用于执行功能的嵌入式固件。
图6是可以用于实施实施例的示例计算设备的框图。图6描绘了实施例可以被实施的计算设备的许多示例中的一个示例。本文中所提供的对计算设备600的描述是出于说明的目的而提供的,并且不旨在作为限制。如对于(多个)相关领域的技术人员而言将是已知的,实施例可以被实施在其他类型的计算机***中。
如图6中所示出,计算设备600可以包括被称为处理单元602的一个或多个处理器或处理器电路、***存储器604和将包括***存储器604的各种***组件耦合至处理单元602的总线606。处理单元602可以包括电气和/或光学电路,该电气和/或光学电路作为中央处理单元(CPU)、微控制器、微处理器和/或其他物理硬件处理器电路而被实施在一个或多个物理硬件电气电路设备元件和/或集成电路设备(半导体材料芯片或裸片)中。处理单元602可以执行被存储在计算机可读介质中的程序代码,诸如操作***630的程序代码、应用程序632、其他程序634等。总线606表示若干种类型的总线结构中的任何总线结构的一种或多种总线结构,包括使用各种总线架构中的任何总线架构的存储器总线或存储器控制器、***总线、加速图形端口和处理器或本地总线。***存储器604包括只读存储器(ROM)608和随机存取存储器(RAM)610。基本输入/输出***612(BIOS)被存储在ROM 608中。
计算设备600还具有以下驱动中的一个或多个驱动:用于从硬盘读取和写入至硬盘的硬盘驱动614、用于从可移除磁盘618读取或写入至可移除磁盘618的磁盘驱动616和用于从可移除光盘622读取或写入至可移除光盘622的光盘驱动620,诸如CD ROM、DVD ROM或其他光学介质。硬盘驱动614、磁盘驱动616和光盘驱动620分别通过硬盘驱动接口624、磁盘驱动接口626和光学驱动接口628而被连接到总线606。驱动及其相关联的计算机可读介质为计算机提供了计算机可读指令、数据结构、程序模块和其他数据的非易失性存储装置。尽管描述了硬盘、可移除磁盘和可移除光盘,但其他类型的基于硬件的计算机可读存储介质可以用于存储数据,诸如闪存卡、数字视频磁盘、RAM、ROM和其他硬件存储介质。
若干程序模块可以被存储在硬盘、磁盘、光盘、ROM或RAM上。这些程序包括操作***630、一个或多个应用程序2532、其他程序634和程序数据636。应用程序632或其他程序634可以包括例如用于实施本文中所描述的***的计算机程序逻辑(例如计算机程序代码或指令)。
用户可以通过输入设备(诸如键盘638和指向设备640)将命令和信息键入到计算设备600中。其他输入设备(未示出)可以包括麦克风、操纵杆、游戏手柄、碟形卫星天线、扫描器、触摸屏和/或触摸板、用于接收语音输入的语音识别***、用于接收手势输入的手势识别***等。这些输入设备和其他输入设备通常通过被耦合至总线606的串行端口接口642而被连接到处理器电路602,但可以通过其他接口(诸如并行端口、游戏端口或通用串行总线(USB))连接。
显示屏644还经由接口(诸如视频适配器646)被连接到总线606。显示屏644可以位于计算设备600外部或并入在计算设备600中。显示屏644可以显示信息以及作为用于接收用户命令和/或其他信息(例如通过触摸、手指手势、虚拟键盘等)的用户界面。除了显示屏644之外,计算设备600可以包括其他***输出设备(未示出),诸如扬声器和打印机。
计算设备600通过适配器或网络接口650、调制解调器652或用于通过网络建立通信的其他部件连接到网络648(例如互联网)。如图6中所示出,调制解调器652(其可以是内部的或外部的)可以经由串行端口接口642被连接到总线606,或可以使用包括并行接口的另一种接口类型而被连接到总线606。
如本文中所使用,术语“计算机程序介质”、“计算机可读介质”和“计算机可读存储介质”通常用于指物理硬件介质,诸如与硬盘驱动614相关联的硬盘、可移除磁盘618、可移除光盘622、其他物理硬件介质,诸如RAM、ROM、闪存卡、数字视频磁盘、压缩磁盘、MEM、基于纳米技术的存储设备和其他类型的物理/有形硬件存储介质(包括图6的***存储器604)。这种计算机可读存储介质不同于通信介质(不包括通信介质)并且与通信介质不重叠。通信介质通常在调制数据信号(诸如载波)中体现计算机可读指令、数据结构、程序模块或其他数据。术语“调制数据信号”意指具有其特点中的一个或多个特点的信号,这些特点以关于对信号中的信息进行编码的方式设置或改变。作为示例而非限制,通信介质包括无线介质(诸如声学、RF、红外以及其他无线介质)以及有线介质。实施例还涉及这种通信介质。
如上文所提及,计算机程序和模块(包括应用程序632和其他程序634)可以被存储在硬盘、磁盘、光盘、ROM、RAM或其他硬件存储介质上。这种计算机程序也可以经由网络接口650、串行端口接口642或任何其他接口类型而被接收。这种计算机程序在被应用执行或加载时使得计算设备600能够实施本文中所讨论的实施例的特征。因此,这种计算机程序表示计算设备600的控制器。
实施例还涉及包括被存储在任何计算机可读介质上的计算机代码或指令的计算机程序产品。这种计算机程序产品包括硬盘驱动、光盘驱动、存储器设备封装、便携式记忆棒、记忆卡和其他类型的物理存储硬件。
IV.附加示例性实施例
在本文中描述了用于支持和协商跨多个产品的多个(例如静态)API版本的方法、***和计算机程序产品。可互操作程序(诸如和Internet/>浏览器应用)可以提供针对API的多个版本的同时支持。API和程序API适配器可以被版本化为管理异步开发的程序和API的兼容性,这些异步开发的程序和API可以在许多计算环境中被异步安装和更新。适配器可以包括程序源代码的版本化部分。开发中程序代码和API可以被分叉以创建稳定接口的版本化快照。API和适配器的“开发中”版本可以与版本化API和适配器同时存在。兼容版本协商可以例如在进程启动期间发生。协商可以激活例如在Edge选项卡处于Internet Explorer模式下时支持的最高API版本。
在一个示例中,一种由至少一个计算设备执行的方法可以包括例如通过以下操作将第一程序配置为经由应用编程接口(API)与第二程序交互:从第一API适配器的M个版本之中选择第一API适配器的兼容版本,并且从第二API适配器的N个版本之中选择第二API适配器的兼容版本,该第一API适配器使第一程序适配于API,该第二API适配器使第二程序适配于API;以及利用第一API适配器的兼容版本和第二API适配器的兼容版本激活API。
在一个示例中,激活API可以包括:利用第一API适配器的兼容版本和第二API适配器的兼容版本激活API的Q个版本中的一个版本。
在一个示例中,选择可以包括例如在第一程序与第二程序之间或在第一API适配器与第二API适配器之间对非版本化API执行的协商。
在一个示例中,第一API适配器可以包括与第一程序的代码的非版本化部分进行接口的第一程序的代码的版本化部分。第二API适配器可以包括与第二程序的代码的非版本化部分进行接口的第二程序的代码的版本化部分。
在一个示例中,第一API适配器可以包括第一应用二进制接口(ABI)。第二API适配器可以包括第二ABI。
在一个示例中,第二程序可以与操作***集成。
在一个示例中,该方法还可以包括例如由第一程序使第二程序实例化。
在一个示例中,该方法还可以包括例如由第二程序将第一API适配器加载于第二程序中。
在一个示例中,第一程序可以包括例如第一web浏览器应用。并且第二程序可以包括第二web浏览器应用。
在一个示例中,该方法还可以包括例如由第一web浏览器应用导航至与第一web浏览器应用不兼容但与第二web浏览器应用兼容的web页面;利用第二web浏览器应用来处理web页面;以及将web页面呈现于第一web浏览器应用的用户界面中。
在一个示例中,该方法还可以包括例如通过在不同开发阶段使第一API适配器的开发中版本分叉来创建第一API适配器的M个版本中的每个版本;以及通过在不同开发阶段使第二API适配器的开发中版本分叉来创建第二API适配器的N个版本中的每个版本。
在一个示例中,选择第一API适配器的兼容版本和第二API适配器的兼容版本可以包括:选择第一API适配器的开发中版本和第二API适配器的开发中版本。
在一个示例中,一种***(例如计算环境)可以被配置为例如通过以下操作将第一程序配置为经由应用编程接口(API)与第二程序交互:从第一API适配器的M个版本之中选择第一API适配器的兼容版本,并且从第二API适配器的N个版本之中选择第二API适配器的兼容版本,该第一API适配器使第一程序适配于API,该第二API适配器使第二程序适配于API;以及利用第一API适配器的兼容版本和第二API适配器的兼容版本激活API的Q个版本中的一个版本。
在一个示例中,第一API适配器可以包括与第一程序的代码的非版本化部分进行接口的第一程序的代码的版本化部分。第二API适配器可以包括与第二程序的代码的非版本化部分进行接口的第二程序的代码的版本化部分。
在一个示例中,第一程序可以包括第一web浏览器应用,并且第二程序包括第二web浏览器应用。
在一个示例中,计算环境还可以被配置为例如由第一web浏览器应用导航至与第一web浏览器应用不兼容但与第二web浏览器应用兼容的web页面;利用第二web浏览器应用来处理web页面;以及将web页面呈现于第一web浏览器应用的用户界面中。
在一个示例中,一种计算机可读存储介质可以在其上记录有程序指令,该程序指令在被至少一个处理电路执行时执行方法,该方法包括例如通过以下操作将第一程序配置为经由应用编程接口(API)与第二程序交互:从第一API适配器的M个版本之中选择第一API适配器的兼容版本,并且从第二API适配器的N个版本之中选择第二API适配器的兼容版本,该第一API适配器使第一程序适配于API,该第二API适配器使第二程序适配于API;利用第一API适配器的兼容版本和第二API适配器的兼容版本激活API;以及使用激活的API以及第一API适配器的兼容版本和第二API适配器的兼容版本在第一程序与第二程序之间通信。
在一个示例中,第一API适配器可以包括与第一程序的代码的非版本化部分进行接口的第一程序的代码的版本化部分。第二API适配器可以包括与第二程序的代码的非版本化部分进行接口的第二程序的代码的版本化部分。
在一个示例中,第一API适配器的M个版本中的每个版本可以包括第一API适配器在不同开发阶段的开发中版本的分叉。第二API适配器的N个版本中的每个版本可以包括第二API适配器在不同开发阶段的开发中版本的分叉。
在一个示例中,由计算机可读存储介质执行的方法还可以包括例如由第一程序使第二程序实例化。
V.结论
虽然本发明的各种实施例已经在上文进行了描述,但应理解,这些实施例仅通过示例而非限制的方式被呈现。(多个)相关领域的技术人员应理解,在不脱离所附权利要求所限定的本发明的精神和范围的情况下,在形式和细节方面的各种改变可以在本发明中进行。因此,本发明的广度和范围不应由上述示例性实施例中的任何示例性实施例限制,而应仅根据以下权利要求书及其等效物来限定。
Claims (20)
1.一种由至少一个计算设备执行的方法,包括:
通过以下操作将第一程序配置为经由应用编程接口API与第二程序交互:
从第一应用二进制接口ABI的M个版本之中选择所述第一ABI的兼容版本,并且从第二ABI的N个版本之中选择所述第二ABI的兼容版本,所述第一ABI使所述第一程序适配于所述API,所述第二ABI使所述第二程序适配于所述API,其中M和N分别是大于零的整数值;以及
利用所述第一ABI的所述兼容版本和所述第二ABI的所述兼容版本来激活所述API。
2.根据权利要求1所述的方法,其中激活所述API包括利用所述第一ABI的所述兼容版本和所述第二ABI的所述兼容版本来激活所述API的Q个版本中的一个版本,其中Q是大于零的整数值。
3.根据权利要求1所述的方法,其中所述选择包括在所述第一程序与所述第二程序之间或在所述第一ABI与所述第二ABI之间对非版本化API执行的协商。
4.根据权利要求1所述的方法,其中:
所述第一ABI包括与所述第一程序的代码的非版本化部分进行接口的所述第一程序的代码的版本化部分;以及
所述第二ABI包括与所述第二程序的代码的非版本化部分进行接口的所述第二程序的代码的版本化部分。
5.根据权利要求1所述的方法,其中所述第二程序与操作***集成。
6.根据权利要求1所述的方法,还包括:
由所述第一程序使所述第二程序实例化。
7.根据权利要求6所述的方法,还包括:
由所述第二程序将所述第一ABI加载于所述第二程序中。
8.根据权利要求7所述的方法,其中所述第一程序包括第一web浏览器应用,并且所述第二程序包括第二web浏览器应用。
9.根据权利要求8所述的方法,还包括:
由所述第一web浏览器应用导航至与所述第一web浏览器应用不兼容但与所述第二web浏览器应用兼容的web页面;
利用所述第二web浏览器应用来处理所述web页面;以及
将所述web页面呈现于所述第一web浏览器应用的用户界面中。
10.根据权利要求1所述的方法,还包括:
通过在不同开发阶段使所述第一ABI的开发中版本分叉来创建所述第一ABI的所述M个版本中的每个版本;以及
通过在不同开发阶段使所述第二ABI的开发中版本分叉来创建所述第二ABI的所述N个版本中的每个版本。
11.根据权利要求10所述的方法,其中选择第一ABI的兼容版本和第二ABI的兼容版本包括:选择所述第一ABI的所述开发中版本和所述第二ABI的所述开发中版本。
12.一种***,包括:
处理器;以及
至少一个存储器,存储被配置为由所述处理器执行的指令,所述指令被配置为执行操作,所述操作包括:
通过以下操作将第一程序配置为经由应用编程接口API与第二程序交互:
从第一应用二进制接口ABI的M个版本之中选择所述第一ABI的兼容版本,并且从第二ABI的N个版本之中选择所述第二ABI的兼容版本,所述第一ABI使所述第一程序适配于所述API,所述第二ABI使所述第二程序适配于所述API,其中M和N分别是大于零的整数值;以及
利用所述第一ABI的所述兼容版本和所述第二ABI的所述兼容版本来激活所述API的Q个版本中的一个版本,其中Q是大于零的整数值。
13.根据权利要求12所述的***,其中:
所述第一ABI包括与所述第一程序的代码的非版本化部分进行接口的所述第一程序的代码的版本化部分;以及
所述第二ABI包括与所述第二程序的代码的非版本化部分进行接口的所述第二程序的代码的版本化部分。
14.根据权利要求12所述的***,其中所述第一程序包括第一web浏览器应用,并且所述第二程序包括第二web浏览器应用。
15.根据权利要求14所述的***,其中所述至少一个存储器还存储被配置为执行如下操作的指令,所述操作包括:
由所述第一web浏览器应用导航至与所述第一web浏览器应用不兼容但与所述第二web浏览器应用兼容的web页面;
利用所述第二web浏览器应用来处理所述web页面;以及
将所述web页面呈现于所述第一web浏览器应用的用户界面中。
16.根据权利要求12所述的***,其中:
所述第一ABI的所述M个版本中的每个版本包括所述第一ABI的开发中版本在不同开发阶段的分叉;以及
所述第二ABI的所述N个版本中的每个版本包括所述第二ABI的开发中版本在不同开发阶段的分叉。
17.一种计算机可读存储介质,在其上记录有程序指令,所述程序指令在由至少一个处理电路执行时,执行方法,所述方法包括:
通过以下操作将第一程序配置为利用应用编程接口API与第二程序交互:
从第一应用二进制接口ABI的M个版本之中选择所述第一ABI的兼容版本,并且从第二ABI的N个版本之中选择所述第二ABI的兼容版本,所述第一ABI使所述第一程序适配于所述API,所述第二ABI使所述第二程序适配于所述API,其中M和N分别是大于零的整数值;以及
利用所述第一ABI的所述兼容版本和所述第二ABI的所述兼容版本来激活所述API;以及
使用所激活的所述API以及所述第一ABI的所述兼容版本和所述第二ABI的所述兼容版本在所述第一程序和所述第二程序之间进行通信。
18.根据权利要求17所述的计算机可读存储介质,其中:
所述第一ABI包括与所述第一程序的代码的非版本化部分进行接口的所述第一程序的代码的版本化部分;以及
所述第二ABI包括与所述第二程序的代码的非版本化部分进行接口的所述第二程序的代码的版本化部分。
19.根据权利要求17所述的计算机可读存储介质,其中:
所述第一ABI的所述M个版本中的每个版本包括所述第一ABI的开发中版本在不同开发阶段的分叉;以及
所述第二ABI的所述N个版本中的每个版本包括所述第二ABI的开发中版本在不同开发阶段的分叉。
20.根据权利要求19所述的计算机可读存储介质,还包括:
由所述第一程序使所述第二程序实例化。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/440,478 | 2019-06-13 | ||
US16/440,478 US11010212B2 (en) | 2019-06-13 | 2019-06-13 | System and method for supporting and negotiating multiple API versions across multiple products |
PCT/US2020/030015 WO2020251673A1 (en) | 2019-06-13 | 2020-04-27 | System and method for supporting and negotiating multiple api versions across multiple products |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114026540A CN114026540A (zh) | 2022-02-08 |
CN114026540B true CN114026540B (zh) | 2024-03-19 |
Family
ID=70740769
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080042791.8A Active CN114026540B (zh) | 2019-06-13 | 2020-04-27 | 用于支持和协商跨多个产品的多个api版本的***和方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11010212B2 (zh) |
EP (1) | EP3983885A1 (zh) |
CN (1) | CN114026540B (zh) |
WO (1) | WO2020251673A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11163621B1 (en) * | 2020-07-08 | 2021-11-02 | Fujitsu Limited | Automated API access using machine learning |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104081748A (zh) * | 2012-01-25 | 2014-10-01 | 微软公司 | 文档通信运行时接口 |
CN109783119A (zh) * | 2018-12-07 | 2019-05-21 | 上海七印信息科技有限公司 | 一种数据多版本兼容升级管理***及其管理方法 |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7069562B2 (en) | 2001-12-12 | 2006-06-27 | Sun Microsystems, Inc. | Application programming interface for connecting a platform independent plug-in to a web browser |
US7080356B2 (en) * | 2002-09-18 | 2006-07-18 | Sun Microsystems, Inc. | Certification test suite |
US7634578B2 (en) * | 2005-07-14 | 2009-12-15 | Microsoft Corporation | Node-to-node communication pipelines |
US8332870B2 (en) * | 2008-09-30 | 2012-12-11 | Accenture Global Services Limited | Adapter services |
US8863108B2 (en) * | 2010-11-23 | 2014-10-14 | Red Hat, Inc. | Finding out if software will run on an operating system without installing that software |
US10394551B2 (en) * | 2011-02-24 | 2019-08-27 | Red Hat, Inc. | Managing kernel application binary interface/application programming interface-based discrepancies relating to kernel packages |
US9891939B2 (en) * | 2011-03-03 | 2018-02-13 | Microsoft Technology Licensing, Llc | Application compatibility with library operating systems |
US20150161277A1 (en) | 2011-03-14 | 2015-06-11 | Browsium, Inc. | Methods and systems for one browser version to use a rendering engine of another browser version for displaying information |
CN103593370B (zh) | 2012-08-16 | 2017-08-22 | 腾讯科技(深圳)有限公司 | 在浏览器中实现扩展应用的方法及浏览器 |
US9817632B2 (en) * | 2013-02-19 | 2017-11-14 | Microsoft Technology Licensing, Llc | Custom narration of a control list via data binding |
US9582297B2 (en) * | 2013-05-16 | 2017-02-28 | Vmware, Inc. | Policy-based data placement in a virtualized computing environment |
US9513978B2 (en) * | 2014-10-17 | 2016-12-06 | International Business Machines Corporation | Integrated support for application porting transparency and streamlined system migration in heterogeneous platform environments |
US9785490B2 (en) * | 2014-12-23 | 2017-10-10 | Document Storage Systems, Inc. | Computer readable storage media for dynamic service deployment and methods and systems for utilizing same |
US10452409B2 (en) * | 2015-10-23 | 2019-10-22 | Oracle International Corporation | Universal adapter for native calling |
US9910763B1 (en) * | 2016-08-18 | 2018-03-06 | International Business Machines Corporation | Test case reduction in application binary interface (ABI) compatibility testing |
US10334414B2 (en) * | 2016-12-24 | 2019-06-25 | Cisco Technology, Inc. | Managing multiple mobile devices on different operator networks |
US10705850B2 (en) * | 2017-10-11 | 2020-07-07 | Microsoft Technology Licensing, Llc | Stack frame unwinding for exception handling |
US10474479B1 (en) * | 2018-06-03 | 2019-11-12 | Apple Inc. | Preventing framework conflicts for multi-OS applications |
-
2019
- 2019-06-13 US US16/440,478 patent/US11010212B2/en active Active
-
2020
- 2020-04-27 WO PCT/US2020/030015 patent/WO2020251673A1/en active Application Filing
- 2020-04-27 CN CN202080042791.8A patent/CN114026540B/zh active Active
- 2020-04-27 EP EP20726610.7A patent/EP3983885A1/en active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104081748A (zh) * | 2012-01-25 | 2014-10-01 | 微软公司 | 文档通信运行时接口 |
CN109783119A (zh) * | 2018-12-07 | 2019-05-21 | 上海七印信息科技有限公司 | 一种数据多版本兼容升级管理***及其管理方法 |
Also Published As
Publication number | Publication date |
---|---|
US20200394082A1 (en) | 2020-12-17 |
CN114026540A (zh) | 2022-02-08 |
EP3983885A1 (en) | 2022-04-20 |
US11010212B2 (en) | 2021-05-18 |
WO2020251673A1 (en) | 2020-12-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9934005B2 (en) | Dynamically building locale objects or subsections of locale objects based on historical data | |
CN102200921B (zh) | 智能引导设备选择和恢复 | |
EP3493059B1 (en) | Application data migration method and device | |
US8239662B1 (en) | Network based operating system across devices | |
US20120071155A1 (en) | Method and Apparatus for Binding Mobile Device Functionality to an Application Definition | |
US10860380B1 (en) | Peripheral device for accelerating virtual computing resource deployment | |
CN113312037A (zh) | 应用于微服务的数据处理方法、装置、设备和存储介质 | |
WO2002033545A2 (en) | Pluggable instantiable distributed objects | |
WO2010113160A1 (en) | A method and system for emulating desktop software applications in a mobile communication network | |
US10915303B2 (en) | Run time integrated development and modification system | |
US11977559B2 (en) | Providing instant and distributed access to a source blob via copy-on-read blobs and link blobs | |
CN114026540B (zh) | 用于支持和协商跨多个产品的多个api版本的***和方法 | |
US9141353B2 (en) | Dynamically building locale objects at run-time | |
CN106775445B (zh) | 数据迁移方法及装置 | |
US10628513B2 (en) | Providing isolated extensibility for webpages with a unified manifest and omni-accessible platform script | |
US10579373B2 (en) | Seamless extension porting | |
EP3853725A1 (en) | Connected application experience | |
US20230169138A1 (en) | Rendering primitive child elements corresponding to child components of a user interface without instantiating the child components | |
US11797638B2 (en) | Aggregate component for parallel browser-initiated actions | |
US20240143340A1 (en) | Hybrid multi-tenant framework for reconfiguring software components | |
US20230376336A1 (en) | Focus synchronization across incompatible operating systems | |
US20240094992A1 (en) | Non-disruptive servicing components of a user mode process | |
US9778917B2 (en) | Dynamically building subsections of locale objects at run-time | |
CN116700880A (zh) | ***功能管理方法、电子设备和计算机程序产品 | |
CN115904623A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |