原文链接
Qt WebEngine支持以下功能:
仅当启用了必需的专有音频和视频编解码器(例如H.264和MPEG layer-3(MP3))时,Qt WebEngine才支持MPEG-4 Part 14(MP4)文件格式。 可以在配置Qt时通过将以下选项传递给配置工具来启用专有编解码器:
-webengine-proprietary-codecs
例如,在配置Qt以在顶层构建它时,可以传递以下选项:
configure -webengine-proprietary-codecs
有关更多信息,请参见Qt配置选项。
当使用qmake仅构建Qt WebEngine模块时,可以使用以下命令(在本示例中,Qt WebEngine源代码位于C:\qt\qtwebengine中):
qmake C:\qt\qtwebengine -- -webengine-proprietary-codecs
警告:分发专有编解码器库时,必须为其获取许可证。
FFmpeg是一种跨平台的解决方案,用于记录,转换和流式传输音频和视频。 可以将其配置为与多个编解码器一起使用,这会在分发编解码器库时引发许可问题。 对于某些编解码器,可以使用开源实现,例如OpenH264。
Chromium DevTools可以检查和调试任何Web内容的布局和性能问题。
可以通过使用命令行选项–remote-debugging-port = [your-port]启动Qt Web Engine应用程序或通过设置环境变量QTWEBENGINE_REMOTE_DEBUGGING来测试该功能,然后使用基于Chromium的浏览器(例如Simple Browser或 Nano浏览器)以连接到http:// localhost:[您的端口]。
Chromium DevTools页面也可以在应用程序中显示。 要进行设置,您可以调用QWebEnginePage :: setInspectedPage()到要检查的页面,这会将DevTools隐式加载到此页面中,也可以调用QWebEnginePage :: setDevToolsPage()来检查该页面。
各自的QML属性是WebEngineView.devToolsView和WebEngineView.inspectedView。
有关更多信息,请参见Qt WebEngine调试和分析。
某些Web服务器,尤其是许多Intranet站点,要求客户端使用称为客户端证书的证书对自身进行身份验证。 Qt WebEngine将读取在macOS和Windows中的系统设置中安装的客户端证书,以及在Linux上安装在NSS数据库中的客户端证书。 可以使用pk12util工具将证书安装到NSS数据库中。
默认情况下,Qt WebEngine不会向服务器提供任何客户端证书,因为这样做会唯一标识用户,并且可能违反隐私期望。
要激活对客户端证书的支持,应用程序需要侦听QWebEnginePage :: selectClientCertificate或WebEngineView.selectClientCertificate信号并选择提供的证书之一。 对于可以导航到不受信任网站的应用程序,建议始终向用户提供选择,然后再将其唯一标识给远程服务器。
Qt WebEngine使应用程序可以使用专门的安全策略和传输机制定义自己的自定义URL方案。
可以使用自定义方案来实现具有所有常规Web安全策略的替代网络协议,用于显示用户界面组件或调试信息的特权内部方案,具有额外限制的沙盒方案等等。
有关更多信息,请参见QWebEngineUrlScheme和QWebEngineUrlSchemeHandler。
Qt WebEngine支持HTML5拖放。
通过在简单浏览器或Nano浏览器中打开HTML5拖放演示,例如HTML5演示-拖放,HTML5演示-简单拖放,或HTML5演示-拖放,自动上传,可以测试此功能。
将文件拖到浏览器中实际上不是HTML5的一部分,但它受支持。 可以通过打开HTML5演示-文件API进行测试。
Qt 5.7.0中添加了对此功能的支持。
Qt WebEngine支持以全屏模式查看Web内容。 有关更多信息,请参见WebEngineSettings.fullscreenSupportEnabled,WebEngineView.fullScreenRequested,QWebEngineSettings :: FullScreenSupportEnabled和QWebEnginePage :: fullScreenRequested。
可以通过在视频播放器或Nano浏览器中播放YouTube视频,然后单击全屏图标进入全屏模式来测试此功能。
Qt 5.6.0中添加了对此功能的支持。
如果已安装Widevine DRM插件,则Qt WebEngine支持查看受DRM保护的视频。
DRM服务最常使用的视频格式H.264需要专有的音频和视频编解码器。 有关启用编解码器的更多信息,请参见音频和视频编解码器。
可以通过在castLabs,Swank Motion Pictures,Inc.或Shaka Player的Simple Browser或Nano Browser中播放视频来测试此功能。
Qt 5.7.0中添加了对此功能的支持。
数字版权管理(Digital Rights Management,即DRM)
Qt WebEngine支持以Qt Location为后端的JavaScript Geolocation API。 应用程序必须使用QWebEnginePage :: Geolocation或WebEngineView.Feature明确允许该功能。
如果Qt位置是在Qt WebEngine之前构建的,则可以通过使用地图并允许其查找用户的当前位置来测试此功能。 请注意,在Windows上,必须将外部GPS接收器连接到应用程序。 有关更多信息,请参见Qt定位。
Qt 5.5.0中添加了对此功能的支持。
Qt WebEngine支持HTTP / 2协议的Chromium实现。
可以通过在Simple Browser或Nano Browser中打开HTTP/2演示(例如Akamai HTTP/2演示)来测试此功能。
网页可能会为以下功能请求对话框:
Qt WebEngine为这些功能提供了标准对话框。在基于widget的应用程序中,标准对话框基于QDialog,而在Qt Quick应用程序中,它们可以基于Qt Quick Controls 1或Qt Quick Controls 2(从Qt 5.8开始)。后者仅在eglfs平台上使用。
要显式地强制基于QtQuickControls1或QtQuickControls2的对话框,请将QTWEBENGINE_DIALOG_SET环境变量设置为QtQuickControls1或QtQuickControls2。
Qt WebEngine Widgets对话框可以通过重新实现QWebEnginePage::chooseFiles(), QWebEnginePage::javaScriptAlert(), QWebEnginePage::javaScriptConfirm(),和QWebEnginePage::javaScriptPrompt()函数来定制。
自Qt 5.8以来,通过连接到WebEngineView::authenticationDialogRequested(), WebEngineView::javaScriptDialogRequested(), WebEngineView::colorDialogRequested(), WebEngineView::fileDialogRequested(),和WebEngineView::formValidationMessageRequested()信号,可以定制Qt的快速对话框。例如,请参阅WebEngine Qt快速自定义对话框示例。
如果设置了WebEngineSettings :: pluginsEnabled或QWebEngineSettings :: PluginsEnabled,则Qt WebEngine支持加载Pepper插件API(PPAPI)插件。
除Adobe Flash Player插件外,必须使用Chromium命令行语法以及–register-pepper-plugins参数手动加载这些插件。 参数值是一个条目列表,以逗号分隔,包含文件路径和一个或多个MIME类型,以分号分隔:
<file-path-plugin1>;<mime-type-plugin1>,<file-path-plugin2>;<mime-type1-plugin2>;<mime-type2-plugin2>
例如:
--register-pepper-plugins="libppapi_example.so;application/x-ppapi-example"
MIME类型很重要,因为它可以确定插件用于哪个嵌入。
Qt 5.6.0中添加了对此功能的支持。
如果安装在以下位置之一(取决于平台),则可以自动加载Pepper Flash Player插件:
您还可以使用命令行参数从特定位置加载Pepper Flash播放器:
--ppapi-flash-path=./libpepflashplayer.so
默认情况下,Flash版本设置为11.2.999.999。 您可以使用ppapi-flash-version =参数以major.minor.build.revision格式设置另一个Flash版本:
--ppapi-flash-version=16.0.0.235
如果已安装Adobe Flash PPAPI插件并在浏览器中启用了插件,则可以在简单浏览器或Nano浏览器中测试此功能。 要测试该功能,可以在浏览器中打开https://helpx.adobe.com/flash-player.html页面。
Qt WebEngine支持通过导航到PDF文档来查看它们。 此功能使用Chromium扩展API和PDF查看器插件来显示PDF文档。 可以在简单浏览器或Nano浏览器中对其进行测试。
要使用此功能,需要使用QWebEngineSettings :: PluginsEnabled或WebEngineSettings :: pluginsEnabled启用加载插件。
可以通过QWebEngineSettings :: PdfViewerEnabled或WebEngineSettings :: pdfViewerEnabled设置打开(默认)此功能。
Qt 5.13.0中添加了对此功能的支持。
Qt WebEngine支持Page Lifecycle API规范,这是HTML标准的正在进行中的扩展,用于允许用户代理通过冻结或丢弃后台页面来减少其资源消耗。 该功能在Widgets和QML API中均已公开。
有关正在使用的QML API的示例,请参见WebEngine生命周期示例。
Qt 5.14.0中添加了对此功能的支持。
每个WebEngineView项(或QWebEnginePage对象)可以处于以下三种生命周期状态之一:活动,冻结或废弃。这些状态(如CPU的睡眠状态)控制着Web视图的资源使用情况。
活动状态是Web视图的正常,不受限制的状态。所有可见的Web视图始终处于活动状态,所有尚未完成加载的Web视图也始终处于活动状态。只有不可见的空闲Web视图可以转换为其他生命周期状态。
冻结状态是低CPU使用状态。在这种状态下,大多数HTML任务源都被挂起(冻结),因此,大多数DOM事件处理和JavaScript执行也将被挂起。 Web视图必须不可见以便冻结,因为在此状态下无法进行渲染。
丢弃状态是一种极端的资源节省状态。在这种状态下,Web视图的浏览上下文将被丢弃,并且相应的渲染器子进程将关闭。在这种状态下,CPU和内存使用量实际上减少为零。退出此状态后,网页将自动重新加载。进入和退出废弃状态的过程类似于序列化Web视图的浏览历史记录并销毁该视图,然后创建一个新视图并恢复其历史记录。
另请参见WebEngineView :: LifecycleState。 Widgets API中的等效项是QWebEnginePage :: LifecycleState。
WebEngineView类型的lifecycleState属性是一个读写属性,用于控制Web视图的当前生命周期状态。此属性旨在对可以转换到哪些状态的限制尽可能少。例如,允许冻结当前正在后台播放音乐的Web视图,从而停止播放音乐。为了实现一种不太激进的资源节省策略,以避免中断用户可见的后台活动,必须使用RecommendationState属性。
WebEngineView类型的RecommendationState属性是一个只读属性,考虑到Web视图的当前活动,该属性计算lifecycleState属性的安全限制。因此,在网络视图在后台播放音乐的示例中,建议状态为“活动”,因为更具攻击性的状态将停止音乐。如果应用程序要避免中断后台活动,则应避免将Web视图置于比RecommendationState所提供的状态更积极地节省资源的生命周期状态。
另请参见WebEngineView :: lifecycleState和WebEngineView :: recommendedState。 Widgets API中的等效项是QWebEnginePage :: lifecycleState和QWebEnginePage :: recommendedState。
lifecycleState属性连接到Page Lifecycle API规范,该规范指定两个新的DOM事件(冻结和恢复),并添加一个新的Document.wasDiscarded布尔属性。 从活动状态转换为冻结状态时,将触发冻结和恢复事件,反之亦然。 从Discarded状态转换为Active状态时,Document.wasDiscarded属性设置为true。
Qt WebEngine支持将网页打印为PDF文件。 有关更多信息,请参见QWebEnginePage::printToPdf()和WebEngineView.printToPdf。
可以使用Html2Pdf测试此功能。
Qt 5.7.0中添加了对此功能的支持。
Qt WebEngine使用多个OS进程将网站彼此隔离以及与客户端应用程序隔离,从而提高了安全性和鲁棒性。 支持以下过程模型或在OS进程之间划分网站的方式:
Process per Site Instance
这是默认模型。来自不同站点的页面被置于不同的过程中,并且也隔离了对同一站点的单独访问。
如果两个网页来自相同的注册域名(例如wikipedia.org)和方案(例如https),则认为它们属于同一站点。这类似于同源策略,但是子域将被忽略。例如,https://en.wikipedia.org/和https://de.wikipedia.org/都属于同一个站点。
网站实例是属于同一网站的网页的集合。当应用程序将URL明确地加载到Qt WebEngine中时(例如,通过QWebEnginePage :: setUrl),将为该页面创建一个新的站点实例。但是,当用户单击页面上的相同站点链接时,现有站点实例仅扩展了更多页面。
例如,在“简单浏览器”示例中,当用户打开两个选项卡并在URL栏中明确输入https://en.wikipedia.org/时,两个选项卡将具有各自独立的OS进程(因为明确输入URL会创建一个新的网站实例)。但是,当用户在中间单击某些相同站点的链接以打开更多选项卡时,这些新的选项卡将共享相同的OS进程(因为用户交互扩展了现有站点实例)。
Process per Site
来自不同站点的页面被置于单独的过程中。 与“按站点实例处理”不同,对同一站点的所有访问将共享一个OS进程。
该模型的好处是减少了内存消耗,因为更多的网页将共享进程。 缺点包括降低的安全性,健壮性和响应性。
要启用此模型,请使用命令行参数–process-per-site。 请参阅使用命令行参数。
Single Process
仅出于调试目的,可以使用命令行参数–single-process启用单个进程模式。 请参阅使用命令行参数和Qt WebEngine调试和分析。
Qt WebEngine支持将拼写检查支持集成到HTML表单中,以使用户能够提交拼写检查的消息。 当用户单击带下划线的拼写错误的单词时,默认的上下文菜单最多显示四个建议。 选择一个将替换拼写错误的单词。
为了能够检查拼写,拼写检查器需要词典。 它支持来自Hunspell项目的词典,但是必须将其编译为特殊的二进制格式。 Hunspell词典包含两个文件:
可以使用Qt附带的qwebengine_convert_dict工具将这两个文件转换为bdic格式。 当Qt WebEngine拼写检查器初始化时,它将尝试加载bdict词典并检查它们的一致性。
如果设置了QTWEBENGINE_DICTIONARIES_PATH,则拼写检查器将使用指定目录中的字典,而无需查找其他字典。 否则,它将使用相对于可执行文件的qtwebengine_dictionaries目录(如果存在)。 如果不存在,它将在QT_INSTALL_PREFIX / qtwebengine_dictionaries中查找。
在macOS上,取决于在构建时如何配置Qt WebEngine,有两种可能性可以找到拼写检查数据:
因此,在macOS Hunspell情况下,Qt WebEngine将在位于应用程序包Resources目录内的qtwebengine_dictionaries子目录中,以及在位于Qt框架包内的Resources目录中查找。
总而言之,在使用Hunspell的情况下,应考虑以下路径:
默认情况下,拼写检查是禁用的,并且可以使用基于窗口小部件的应用程序中的QWebEngineProfile :: setSpellCheckEnabled()方法和Qt Quick应用程序中的WebEngineProfile.spellCheckEnabled属性针对每个配置文件启用拼写检查。
用于拼写检查的当前语言是针对每个配置文件定义的,可以使用QWebEngineProfile :: setSpellCheckLanguages()方法或WebEngineProfile.spellCheckLanguages属性进行设置。
可以通过构建并运行拼写检查器示例来测试此功能。Qt 5.8.0中添加了对此功能的支持。
Qt WebEngine支持用于浏览网页并与之交互的触摸设备。
应用程序可以通过以下方式禁止使用触摸事件:
Qt WebEngine支持查看网页的HTML源。
可从自定义菜单使用此功能或将其分配给自定义事件。 有关更多信息,请参见WebEngineView :: WebAction和QWebEnginePage :: WebAction。
可以通过在Simple Browser或Nano Browser中打开网页,然后在上下文菜单中选择Page Source来测试此功能。 页面源上下文菜单项在新选项卡中打开源视图。
为了在当前选项卡中打开源视图,还支持带有视图源URI方案的URL。 例如,您可以在URL栏中键入以下URL以查看qt.io网页的HTML源:
view-source:https://www.qt.io/
使用视图源URI方案自动完成不完整的URL,使使用此功能更加舒适。 例如,以下不完整的URL也会加载qt.io网页的源视图:
view-source:qt.io
Qt 5.8.0中添加了对此功能的支持。
WebRTC通过简单的API为浏览器提供实时通信(RTC)功能。 有关更多信息,请参见WebEngineView.Feature和QWebEnginePage :: Feature。
可以通过设置网络摄像头或麦克风,然后在Simple Browser或Nano Browser中打开https://test.webrtc.org/来测试此功能。
Qt WebEngine支持JavaScript Web Notifications API。 应用程序必须通过使用QWebEnginePage :: Notifications或WebEngineView.Notifications明确允许该功能。
Qt 5.13.0中添加了对此功能的支持。
本文概述了QWebEngine的功能和特性,作为web嵌入的指导性质的文章。