|
|
| 第1行: |
第1行: |
| {{Infobox
| | JavaScript(通常缩写为JS)是一种基于原型、多范式的动态脚本语言,其核心语法与结构遵循ECMAScript标准。该语言最初由布兰登·艾奇(Brendan Eich)于1995年在网景通信公司(Netscape Communications)设计实现,旨在为网页提供动态交互能力,后随万维网的发展成为世界上使用最广泛的通用编程语言之一<ref name=":0">[https://www.loc.gov/preservation/digital/formats/fdd/fdd000443.shtml ECMAScript Language (ECMA-262), including JavaScript - Library of Congress]</ref>。JavaScript与ECMAScript的关系为:ECMAScript是由Ecma国际组织制定的语言规范标准,JavaScript是该规范最主要的实现与方言<ref name=":1">[https://262.ecma-international.org/15.0/ ECMAScript® 2024 Language Specification - Ecma International]</ref>。除浏览器环境外,JavaScript亦通过[[Node.js]]等平台广泛应用于服务器端与嵌入式系统开发<ref name=":2">[https://tc39.es/ecma262/2024/ ECMAScript® 2024 Language Specification - TC39]</ref>。 |
| | 标题 = WebView
| |
| | 内容 =
| |
| {{!}}-
| |
| ! 类型
| |
| {{!}} 软件组件
| |
| {{!}}-
| |
| ! 用途
| |
| {{!}} 在原生应用中嵌入Web内容
| |
| {{!}}-
| |
| ! 首次出现
| |
| {{!}} 1990年代末(KHTML/WebKit前身)
| |
| {{!}}-
| |
| ! 主流引擎
| |
| {{!}} WebKit、Blink、WebView2
| |
| {{!}}-
| |
| ! 相关标准
| |
| {{!}} HTML、CSS、JavaScript
| |
| }}
| |
|
| |
|
| '''[[Web]]View'''是一种[[软件]]组件,由[[操作系统]]或开发框架提供,用于在原生应用程序内部渲染Web内容,而无需将[[用户]]切换至系统级Web[[浏览器]]。<ref name=":0">[https://webview-cg.github.io/usage-and-challenges/ WebView: Usage Scenarios and Challenges - W3C WebView Community Group]</ref> 它允许开发者将基于[[HTML]]、[[CSS]]和[[Java]]Script的网页或Web应用嵌入到桌面或移动应用中,实现原生代码与Web技术的混合开发模式。<ref name=":1">[https://median.co/blog/what-is-a-webview-app-how-do-i-build-one What is a WebView app, and when should you build one? - Median]</ref> WebView广泛应用于混合移动应用、桌面应用内嵌页面、OAuth登录流程及富[[文本]]内容展示等场景<ref name=":0" />。 | | {| class="infobox" style="border:1px solid #ccc; background:#f8f9fa; width:24em; float:right; margin:0 0 1em 1em; border-spacing:5px;" |
| | |- |
| | ! colspan="2" style="text-align:center;" | '''JavaScript''' |
| | |- |
| | | 中文名 || '''JavaScript''' |
| | |- |
| | | 英文名 || '''JavaScript''' |
| | |- |
| | | 别名 || JS、ECMAScript(规范名) |
| | |- |
| | | 设计者 || 布兰登·艾奇(Brendan Eich) |
| | |- |
| | | 发行时间 || 1995年12月 |
| | |- |
| | | 开发公司 || [[网景通信公司]](Netscape) |
| | |- |
| | | 标准化组织 || Ecma国际(Ecma International) |
| | |- |
| | | 标准编号 || ECMA-262 / ISO/IEC 16262 |
| | |- |
| | | 最新标准 || ECMAScript 2024(第15版) |
| | |- |
| | | 编程范式 || 多范式(事件驱动、函数式、面向对象) |
| | |- |
| | | 运行环境 || [[浏览器]]、[[Node.js]]、[[嵌入式系统]]等 |
| | |} |
|
| |
|
| == 历史 == | | == 历史 == |
|
| |
|
| === WebKit的起源 === | | === 诞生与早期发展 === |
|
| |
|
| 现代WebView技术的根基可追溯至1998年KDE项目开发的KHTML排版引擎与K[[Js|JS]] [[JavaScript]]引擎。<ref name=":2">[https://butthurtfork.com/ The Butthurt Fork - KHTML to WebKit Timeline]</ref> 2001年6月,[[Apple]]公司内部启动[[WebKit]]项目,基于KHTML进行fork,旨在为[[macOS]]构建专用的浏览器引擎。<ref name=":3">[https://github.com/liamzebedee/webkit-source-archive GitHub - liamzebedee/webkit-source-archive]</ref> 2003年1月,Steve Jobs在Macworld大会上发布[[Safari]]浏览器,首次公开采用WebKit引擎。<ref name=":2" /> 2005年6月,Apple将WebKit以[[BSD许可证]]开源,使其成为[[跨平台]]渲染引擎的基础。<ref name=":2" />
| | 1995年5月,网景通信公司聘请布兰登·艾奇开发一种用于网页的轻量级脚本语言,以便为非专业程序员提供一种简单工具来增强网页交互性<ref name=":3">[https://deno.com/blog/history-of-javascript A brief history of JavaScript - Deno]</ref>。该语言最初内部代号为Mocha,随后更名为LiveScript。同年12月,网景与Sun Microsystems联合宣布将其正式命名为JavaScript,并作为网景Navigator 2.0浏览器的脚本功能发布<ref name=":0" />。此举主要是出于市场考量,借当时[[Java]]语言的知名度进行推广,尽管两者在技术层面并无直接继承关系。 |
|
| |
|
| 2008年,[[Google]]基于WebKit发布[[Chromium]]浏览器;2013年4月,Google从WebKit fork出[[Blink]]引擎,作为Chromium及后续[[Chrome]]的渲染核心。<ref name=":4">[https://smist08.wordpress.com/2013/04/13/google-forks-webkit/ Google Forks WebKit - smist08]</ref> 这一分支事件深刻影响了后续各平台WebView组件的技术路线。
| | 1996年,微软在Internet Explorer 3.0中引入了与之功能相近的JScript,推动了浏览器脚本能力的普及,同时也引发了早期浏览器兼容性问题<ref name=":0" />。 |
|
| |
|
| === 移动平台WebView的演进 === | | === 标准化进程 === |
|
| |
|
| 在[[Android]]平台,早期版本的WebView直接集成于操作系统核心,并基于WebKit构建。Android 4.4(KitKat)起,WebView转向采用Chromium/Blink引擎。<ref name=":5">[https://www.techtarget.com/searchsecurity/definition/Android-Webview What is Android System WebView and should you uninstall it? - TechTarget]</ref> Android 5.0(Lollipop)将WebView从系统核心中分离,使其可通过Google Play商店独立更新,从而缩短安全补丁的推送周期。Android 7至9期间,WebView曾与Chrome浏览器合并;自Android 10起,WebView再次成为独立系统组件,继续通过Google Play分发更新。<ref name=":5" />
| | 1996年11月,网景宣布已将JavaScript提交至Ecma国际(前身为欧洲计算机制造商协会)进行标准化。Ecma随即成立了技术委员会TC39负责制定语言规范<ref name=":0" />。1997年6月,Ecma大会正式通过第一版ECMA-262标准,该标准被提交至ISO/IEC JTC 1快速通道程序,并于1998年4月获批为国际标准ISO/IEC 16262<ref name=":1" />。 |
|
| |
|
| 在[[iOS]]与macOS平台,Apple于2010年推出WebKit2[[架构]],引入多进程模型与更强的安全性设计。2014年发布的iOS 8与macOS Yosemite中,WKWebView取代旧版UIWebView/WebView成为官方推荐的嵌入组件。<ref name=":6">[https://github.com/webview/webview/issues/254 WebView is deprecated in macOS 10.14 - GitHub webview/webview]</ref> 旧版macOS WebView类已于macOS 10.14(Mojave)中被标记为弃用。<ref name=":6" />
| | 此后,ECMAScript标准经历了多个重要版本:1999年12月发布的第三版引入了正则表达式、异常处理(try/catch)等关键特性,奠定了现代JavaScript的基础<ref name=":2" />。2015年发布的第六版(ECMAScript 2015,又称ES6)带来了类、模块、箭头函数等重大语法更新。自2016年起,TC39改为每年发布一个新版本,以年份命名(如ES2016、ES2017等)<ref name=":0" />。2024年6月26日,第127届Ecma大会批准了ECMAScript 2024(第15版),新增了ArrayBuffer调整大小、Promise.withResolvers、RegExp/v标志等功能<ref name=":4">[https://ecma-international.org/news/ecma-international-approves-new-standards-9/ Ecma International approves new standards - Ecma International]</ref>。 |
|
| |
|
| === Windows平台的发展 === | | == 语言特性 == |
|
| |
|
| [[Microsoft]] [[Windows]]长期依赖Internet Explorer的Trident引擎提供WebBrowser控件。随着[[Edge]]浏览器的推出,Microsoft开发了基于EdgeHTML的WebView控件。2020年,Microsoft正式发布WebView2,该控件基于Chromium内核的[[Microsoft Edge]],支持Win32、WPF、Windows Forms及WinUI 3等多种Windows开发框架,并向下兼容至Windows 7。<ref name=":7">[https://learn.microsoft.com/zh-cn/microsoft-edge/webview2/webview2-api-reference WebView2 API Reference - Microsoft Learn]</ref>
| | === 核心组成 === |
|
| |
|
| == 技术分类 ==
| | 从实现层面看,完整的JavaScript技术栈通常包含三个部分:ECMAScript(定义语法、类型、关键字、对象等语言核心)、文档对象模型(DOM,提供操作网页元素的API)以及浏览器对象模型(BOM,提供与浏览器交互的API)<ref name=":5">[https://juejin.cn/post/7149607339392237582 JavaScript是开源的吗? - 掘金]</ref>。其中ECMAScript本身并不依赖于特定宿主环境,其规范未定义输入输出机制,需由宿主环境(如[[浏览器]]、[[Node.js]])提供具体实现<ref name=":0" />。 |
|
| |
|
| 根据[[W3C]] WebView社区组的定义,WebView按功能与集成深度可分为两类:<ref name=":0" />
| | JavaScript是一种动态类型语言,支持多种编程范式,包括面向对象(基于原型而非类)、函数式和事件驱动编程。其语法设计上借鉴了[[Java]]、C等语言,但更为宽松,采用原型链实现对象继承,并内置了垃圾回收机制<ref name=":2" />。 |
|
| |
|
| '''类浏览器WebView(Browser-like WebViews)''':API表面较为简单,主要用于加载和显示网页内容。这类WebView通常不提供对渲染内容的深度访问权限,且与系统级浏览器共享[[Cookie]]、缓存等状态[[数据]]。<ref name=":0" />
| | === 执行环境 === |
|
| |
|
| '''全功能WebView(Fully-fledged WebViews)''':提供深度的原生与Web集成能力,允许宿主应用完全控制用户体验、读取和修改Web内容,并建立原生代码与Web代码之间的双向通信通道。此类WebView通常不共享系统浏览器的状态数据,具备更强的隔离性。<ref name=":0" />
| | 现代JavaScript引擎普遍采用即时编译(JIT)技术以提升执行效率,将源代码在运行时编译为机器码,而非传统的逐行解释执行<ref name=":0" />。主流引擎包括Google的V8(用于[[Chrome]]与[[Node.js]])、Mozilla的SpiderMonkey(用于Firefox)、Apple的JavaScriptCore(用于Safari)等<ref name=":6">[https://juejin.cn/post/7333421776461135881 死磕前端之 —— 规范、语言、引擎、运行时 - 掘金]</ref>。这些引擎均遵循ECMAScript标准实现语言核心功能,并各自扩展了宿主环境相关的API。 |
|
| |
|
| == 主要平台实现 == | | == ECMAScript标准 == |
|
| |
|
| === iOS与macOS === | | ECMAScript是由Ecma国际组织通过TC39技术委员会制定和维护的国际标准,文档编号为ECMA-262<ref name=":1" />。该标准定义了脚本语言的语法、类型、语句、关键字、保留字、操作符及对象等核心内容<ref name=":0" />。JavaScript与JScript(微软实现)均被视为ECMAScript的方言或实现。TC39采用五阶段流程(Stage 0至Stage 4)管理语言特性提案,只有达到Stage 4(即已有至少两种兼容实现并通过验收测试)的特性才会被纳入年度发布版本<ref name=":0" />。 |
|
| |
|
| Apple平台当前采用WKWebView作为官方WebView实现。WKWebView基于WebKit2架构,将Web内容运行在独立进程中,与宿主应用隔离,从而提升安全性与稳定性。<ref name=":6" /> 2025年,Apple在iOS 26、macOS 26及visionOS 3的SwiftUI中引入了新的原生WebView视图,进一步简化了声明式UI框架下的Web内容嵌入流程。<ref name=":8">[https://swiftprogramming.com/webview-swiftui-ios-macos/ How to Display Web Content in SwiftUI Using WebView - Swift Programming]</ref>
| | == 应用领域 == |
|
| |
|
| === Android ===
| | JavaScript最初设计为[[Web浏览器]]的脚本语言,用于增强网页交互性。随着ECMAScript标准的演进和Node.js等运行时的出现,其应用范围已扩展至服务器端开发、桌面应用(如Electron)、移动应用、游戏开发及物联网嵌入式系统等领域<ref name=":2" />。此外,基于ECMAScript规范的其他实现还包括Adobe曾使用的ActionScript等<ref name=":0" />。 |
| | |
| Android System WebView是基于开源Chromium项目的系统组件,为所有依赖WebView的第三方应用提供统一的Web渲染能力。<ref name=":5" /> 由于其为系统关键组件,Google不建议用户卸载或禁用WebView更新,否则可能导致依赖该组件的应用无法正常工作,并带来安全风险。<ref name=":5" />
| |
| | |
| === Windows ===
| |
| | |
| Microsoft Edge WebView2是Windows平台的现代WebView解决方案。它使用Microsoft Edge(Chromium版)作为渲染引擎,通过Evergreen Runtime模式保持自动更新,开发者亦可选择固定版本Runtime进行分发。<ref name=":7" /> WebView2支持通过COM接口与宿主应用通信,并提供对DOM、Cookie、DevTools等浏览器功能的[[编程]]访问。
| |
| | |
| === Linux ===
| |
| | |
| [[Linux]]桌面环境通常采用WebKitGTK作为WebView实现。WebKitGTK是WebKit引擎的GTK移植版本,被GNOME Web(Epiphany)等浏览器及大量桌面应用采用。<ref name=":9">[https://theapplewiki.com/wiki/WebKit WebKit - The Apple Wiki]</ref>
| |
| | |
| == 跨平台开发库 ==
| |
| | |
| 除操作系统原生提供的WebView组件外,开发者社区亦创建了多款跨平台WebView封装库,以简化多平台桌面应用的开发。其中,webview/webview是一个轻量级的C/[[C++]]库,在Windows上调用Edge WebView2,在macOS上调用Cocoa/WebKit,在Linux上调用GTK/WebKitGTK,实现了一套API下的跨平台Web内容嵌入。<ref name=":10">[https://github.com/webview/webview GitHub - webview/webview]</ref> 类似地,Tauri、[[Wails]]等现代桌面应用框架亦依赖系统原生WebView作为其前端渲染层,以避免内嵌完整浏览器引擎带来的体积开销。
| |
|
| |
|
| == 参考文献 == | | == 参考文献 == |
|
| |
|
| <references /> | | <references /> |