目录

RAD Studio 10.4.1新的基于Chromium的Microsoft Edge浏览器的TEdgeBrowser控件用法

一、TEdgeBrowser安装部署说明

1.1、TEdgeBrowser的使用环境安装

1.2、TEdgeBrowser所的依赖的动态链接库的安装

二、delphi 10.4.1下TEdgeBrowser的使用

1、很简单的浏览应用

1.1、输出内容与介绍:

1.2、代码如下:

1.3、运行效果(再也不想TWebbrowser那样不支持Bootstrap响应了)

2、与JavaScript交互

附:本博客相关博文:

1、《RAD Studio 10.4.1的TEdgeBrowser与javascript交互-基于Chromium的Edge浏览器控件用法之二》

2、《Delphi Restful之客户端javascript与中间件服务器交互》

3、microsoft-edge开发工具之网络工具的使用

网络功能参考 - Microsoft Edge Development | Microsoft Docs

喜欢的话,就在下面点个赞、收藏就好了,方便看下次的分享:


RAD Studio 10.4.1新的基于Chromium的Microsoft Edge浏览器的TEdgeBrowser控件用法

一、TEdgeBrowser安装部署说明

1.1、TEdgeBrowser的使用环境安装

TWebBrowser使用Win10之前的操作系统提供的IE浏览器; 只要Windows上安装有IE,它就可以工作。
    Microsoft Edge当时还并不是操作系统组件一部分。因此需要在计算机上安装后才能使用.
    从https://www.MicrosoftEdgeInsider.com/cn/download下载的基于Chromium的Microsoft Edge浏览器(Canary渠道版本WebView2 SDK、Dev渠道版本)。
    WebView2控件,当前可通过https://www.nuget.org/packages/Microsoft.Web.WebView2上的NuGet或通过GetIt程序包管理器获得
    若未能安装,请用我下面的百度版本:
        链接:百度网盘 请输入提取码 
        提取码:8191 
        复制这段内容后打开百度网盘--来自百度网盘V6超级会员Karma的分享

(请参考:  https://github.com/webview/webview/tree/master/dll/x86)

安装后,Windows 64位注册表信息:

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Applications\msedge.exe\shell\open\command"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" --single-argument %1可用此Shell命令直接打开某网站:
"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" www.cpuofbs.com

1.2、TEdgeBrowser所的依赖的动态链接库的安装

安装后,TEdgeBrowser将起作用,其控件才会在UI中呈现Web内容:

1、安装:需要将WebView2的微软安装包:64位、32位  
    2、安装:微软Edge浏览器的开发版本:MicrosoftEdgeDev
    3、将分x86和x64:WebView2Loader.dll文件,分别拷贝到:C:\Windows\System32和C:\Windows\SysWOW64
    4、安装一下3、中文件(我安装的x86) :
        regsvr32 /i WebView2Loader.dll
    5、复制文件:
        将4、中的x86的两个文件复制到:[Delphi10.4Update1安装文件夹]\bin\ 下。

运行时:将其复制到可执行文件目录(常识)。

二、delphi 10.4.1下TEdgeBrowser的使用

1、很简单的浏览应用

Chrome DevTools Protocol - latest (tip-of-tree)

https://chromium.googlesource.com/chromium/src/+log/master/third_party/blink/renderer/core/inspector/browser_protocol.json

1.1、输出内容与介绍:


默认开始初始化(UI设计时的)EdgeBrowser1或初始化动态产生的TEdgeBrowser
LICoreWebView2接口TGUID:{189B8AAF-0426-4748-B9AD-243F537EB46B}
EdgeBrowser浏览器内部执行的进程ID必须放在其事件中取引用>0的,否则访问的是其基础进程ID(0):0
窗体加载TEdgeBrowser组件时就完成了WebView2组件的初始化必须EdgeBrowser1.WebViewCreated,否则接口调用报错!
有这样一些接口:
DefaultInterface: ICoreWebView2
ControllerInterface: ICoreWebView2Controller
EnvironmentInterface: ICoreWebView2Environment
SettingsInterface: ICoreWebView2SettingsTEdgeBrowser:支持异步产生WebView控件:
有这样一些方法:
TEdgeBrowser.CreateWebView
TEdgeBrowser.CloseWebView
TEdgeBrowser.CloseBrowserProcessEdgeBrowser浏览器内部执行的进程ID必须放在其事件中取引用:12504TEdgeBrowser需要初始化一些参数,以使一些方法或接口生效:EdgeBrowser1.BuiltInErrorPageEnabled :=true; //:替代了浏览器内部错误提示EdgeBrowser1.ZoomControlEnabled :=true; //:控制用户是否可以影响WebView的缩放EdgeBrowser1.DevToolsEnabled :=true; //:控制用户是否能够使用上下文菜单或键盘快捷键打开DevTools窗口EdgeBrowser1.StatusBarEnabled :=false;//:控制是否显示状态栏EdgeBrowser1.DefaultContextMenusEnabled :=true;//:控制是否在WebView中向用户显示默认上下文菜单//:若false:则网页代码中所有涉及Menu的事件将被屏蔽
{EdgeBrowser1.DefaultScriptDialogsEnabled :=true;//:控制在显示JavaScript对话框时是否启动OnScriptDialogOpeningEdgeBrowser1.ScriptEnabled :=true;//:控制是否在以后的所有导航视图中启用JavaScript的执行//:特别注意:这两个属性:只要引用无论false或true,//,网页下载的原生js将不在生效:由代码控制
//}
EdgeBrowser1.WebMessageEnabled :=true;开始访问TEdgeBrowser的接口对象0
调用JavaScript也是类似的方式ExecuteScript()成功浏览网页TEdgeBrowser组件在执行Navigate时,触发开始浏览网页!TEdgeBrowser组件NavigationID:2,SizeRatio1
:正在调取页面内容https://www.cpuofbs.com/main.htmlTEdgeBrowser组件CapturePreview输出呈现部分的图片:CapturePreview01.png ,AResult=0

1.2、代码如下:

unit uEdgeBrowser01;interfaceusesWinapi.Windows, Winapi.Messages,System.SysUtils, System.Variants, System.Classes,Vcl.Graphics,Vcl.Controls, Vcl.Forms, Vcl.Dialogs,WebView2,Winapi.ActiveX, Vcl.Edge, Vcl.StdCtrls, Vcl.Buttons, Vcl.ExtCtrls;typeTForm_EdgeBrowser01 = class(TForm)EdgeBrowser1: TEdgeBrowser;Panel1: TPanel;BitBtn_Navigate: TBitBtn;Panel2: TPanel;Memo1: TMemo;BitBtn_CapturePreview: TBitBtn;procedure BitBtn_NavigateClick(Sender: TObject);procedure EdgeBrowser1NavigationStarting(Sender: TCustomEdgeBrowser;Args: TNavigationStartingEventArgs);procedure EdgeBrowser1ContentLoading(Sender: TCustomEdgeBrowser;IsErrorPage: Boolean; NavigationID: TUInt64);procedure EdgeBrowser1CreateWebViewCompleted(Sender: TCustomEdgeBrowser;AResult: HRESULT);procedure EdgeBrowser1CapturePreviewCompleted(Sender: TCustomEdgeBrowser;AResult: HRESULT);procedure BitBtn_CapturePreviewClick(Sender: TObject);procedure FormCreate(Sender: TObject);procedure FormShow(Sender: TObject);private{ Private declarations }public{ Public declarations }end;varForm_EdgeBrowser01: TForm_EdgeBrowser01;implementation{$R *.dfm}procedure TForm_EdgeBrowser01.FormCreate(Sender: TObject);
var LICoreWebView2:ICoreWebView2;
beginMemo1.Lines.Add('默认开始初始化(UI设计时的)EdgeBrowser1或初始化动态产生的TEdgeBrowser');GetInterface( StringToGUID('{189B8AAF-0426-4748-B9AD-243F537EB46B}'),LICoreWebView2);if LICoreWebView2 = EdgeBrowser1.DefaultInterface thenMemo1.Lines.Add('LICoreWebView2接口TGUID:'+'{189B8AAF-0426-4748-B9AD-243F537EB46B}' );//GUIDToString StringToGUID
end;procedure TForm_EdgeBrowser01.FormShow(Sender: TObject);
beginMemo1.Lines.Add('EdgeBrowser浏览器内部执行的进程ID必须放在其事件中取引用>0的,否则访问的是其基础进程ID(0):'+EdgeBrowser1.BrowserProcessID.ToString );
end;procedure TForm_EdgeBrowser01.BitBtn_NavigateClick(Sender: TObject);
var LHResult_PostWebMessage:HResult;
beginif EdgeBrowser1.WebViewCreated then//:必须的,否则接口调用报错:beginMemo1.Lines.Add('必须EdgeBrowser1.WebViewCreated,否则接口调用报错!'+sLineBreak+'有这样一些接口:'+sLineBreak+'DefaultInterface: ICoreWebView2'+sLineBreak+'ControllerInterface: ICoreWebView2Controller'+sLineBreak+'EnvironmentInterface: ICoreWebView2Environment'+sLineBreak+'SettingsInterface: ICoreWebView2Settings'+sLineBreak);Memo1.Lines.Add('TEdgeBrowser:支持异步产生WebView控件:'+sLineBreak+'有这样一些方法:'+sLineBreak+'TEdgeBrowser.CreateWebView'+sLineBreak+'TEdgeBrowser.CloseWebView'+sLineBreak+'TEdgeBrowser.CloseBrowserProcess'+sLineBreak);Memo1.Lines.Add('EdgeBrowser浏览器内部执行的进程ID必须放在其事件中取引用:'+EdgeBrowser1.BrowserProcessID.ToString +sLineBreak );Memo1.Lines.Add('TEdgeBrowser需要初始化一些参数,以使一些方法或接口生效:' +sLineBreak+'EdgeBrowser1.BuiltInErrorPageEnabled :=true;' +sLineBreak+'EdgeBrowser1.DefaultContextMenusEnabled :=true;' +sLineBreak+'EdgeBrowser1.ZoomControlEnabled :=true;' +sLineBreak+'EdgeBrowser1.StatusBarEnabled :=true;' +sLineBreak+'EdgeBrowser1.DevToolsEnabled :=true;' +sLineBreak+'EdgeBrowser1.DefaultScriptDialogsEnabled :=true;' +sLineBreak+'EdgeBrowser1.ScriptEnabled :=true;' +sLineBreak+'EdgeBrowser1.WebMessageEnabled :=true;' +sLineBreak);EdgeBrowser1.BuiltInErrorPageEnabled :=true; //:替代了浏览器内部错误提示EdgeBrowser1.ZoomControlEnabled :=true; //:控制用户是否可以影响WebView的缩放EdgeBrowser1.DevToolsEnabled :=true; //:控制用户是否能够使用上下文菜单或键盘快捷键打开DevTools窗口EdgeBrowser1.StatusBarEnabled :=false;//:控制是否显示状态栏EdgeBrowser1.DefaultContextMenusEnabled :=true;//:控制是否在WebView中向用户显示默认上下文菜单//:若false:则网页代码中所有涉及Menu的事件将被屏蔽
{EdgeBrowser1.DefaultScriptDialogsEnabled :=true;//:控制在显示JavaScript对话框时是否启动OnScriptDialogOpeningEdgeBrowser1.ScriptEnabled :=true;//:控制是否在以后的所有导航视图中启用JavaScript的执行//:特别注意:这两个属性:只要引用无论false或true,//,网页下载的原生js将不在生效:由代码控制
//}EdgeBrowser1.WebMessageEnabled :=true;//:必须的,否则接口PostWebMessageAsString调用报错:LHResult_PostWebMessage:=EdgeBrowser1.DefaultInterface.PostWebMessageAsString(PWideChar('{ICoreWebView2:true}') ) ;//:0接口函数执行成功 -1失败if LHResult_PostWebMessage> -1 thenMemo1.Lines.Add('开始访问TEdgeBrowser的接口对象'+IntToStr(LHResult_PostWebMessage) +sLineBreak+'调用JavaScript也是类似的方式ExecuteScript()' +sLineBreak);//:开始访问TEdgeBrowser的接口对象TThread.CreateAnonymousThread(procedurebeginTThread.Synchronize( nil,procedure //var AHTMLContent: string;begin//EdgeBrowser1.NavigateToString(AHTMLContent);if EdgeBrowser1.Navigate( //:Navigate:如果返回了错误码:=true,否则:=false'https://www.cpuofbs.com/main.html' )=false thenMemo1.Lines.Add('成功浏览网页' +sLineBreak );end);end).Start;end;
end;procedure TForm_EdgeBrowser01.EdgeBrowser1ContentLoading(Sender: TCustomEdgeBrowser; IsErrorPage: Boolean; NavigationID: TUInt64);
beginMemo1.Lines.Add('TEdgeBrowser组件NavigationID:'+IntToStr(NavigationID)+',SizeRatio'+EdgeBrowser1.SizeRatio.ToString +sLineBreak+':正在调取页面内容'+EdgeBrowser1.LocationURL +sLineBreak);
end;procedure TForm_EdgeBrowser01.EdgeBrowser1CreateWebViewCompleted(Sender: TCustomEdgeBrowser; AResult: HRESULT);
beginMemo1.Lines.Add('窗体加载TEdgeBrowser组件时就完成了WebView2组件的初始化'+sLineBreak );
end;procedure TForm_EdgeBrowser01.EdgeBrowser1NavigationStarting(Sender: TCustomEdgeBrowser; Args: TNavigationStartingEventArgs);
beginMemo1.Lines.Add('TEdgeBrowser组件在执行Navigate时,触发开始浏览网页!'+sLineBreak );
end;procedure TForm_EdgeBrowser01.BitBtn_CapturePreviewClick(Sender: TObject);
beginif EdgeBrowser1.WebViewCreated thenbeginEdgeBrowser1.ZoomFactor:=100/100;EdgeBrowser1.CapturePreview(System.SysUtils.ExtractFilePath(System.ParamStr(0))+'CapturePreview01.png',PNG);end;end;procedure TForm_EdgeBrowser01.EdgeBrowser1CapturePreviewCompleted(Sender: TCustomEdgeBrowser; AResult: HRESULT);
beginMemo1.Lines.Add('TEdgeBrowser组件CapturePreview输出呈现部分的图片:CapturePreview01.png ,AResult='+IntToStr(AResult)+sLineBreak );
end;end.
object Form_EdgeBrowser01: TForm_EdgeBrowser01Left = 0Top = 0Caption = 'TEdgeBrowser'#24212#29992'01'ClientHeight = 563ClientWidth = 533Color = clBtnFaceFont.Charset = DEFAULT_CHARSETFont.Color = clWindowTextFont.Height = -11Font.Name = 'Tahoma'Font.Style = []OldCreateOrder = FalseOnCreate = FormCreateOnShow = FormShowPixelsPerInch = 96TextHeight = 13object Panel1: TPanelLeft = 0Top = 503Width = 533Height = 60Align = alBottomTabOrder = 0ExplicitTop = 522object BitBtn_Navigate: TBitBtnLeft = 40Top = 6Width = 73Height = 43Caption = #27983#35272#32593#39029Font.Charset = GB2312_CHARSETFont.Color = clWindowTextFont.Height = -13Font.Name = #24494#36719#38597#40657Font.Style = []ParentFont = FalseTabOrder = 0OnClick = BitBtn_NavigateClickendobject BitBtn_CapturePreview: TBitBtnLeft = 128Top = 6Width = 137Height = 43Caption = #25429#33719#21576#29616#20869#23481#20026#22270#29255Font.Charset = GB2312_CHARSETFont.Color = clWindowTextFont.Height = -13Font.Name = #24494#36719#38597#40657Font.Style = []ParentFont = FalseTabOrder = 1OnClick = BitBtn_CapturePreviewClickendendobject Panel2: TPanelLeft = 0Top = 0Width = 533Height = 503Align = alClientCaption = 'Panel2'TabOrder = 1ExplicitWidth = 704ExplicitHeight = 522object EdgeBrowser1: TEdgeBrowserLeft = 1Top = 345Width = 531Height = 157Align = alClientTabOrder = 0OnCapturePreviewCompleted = EdgeBrowser1CapturePreviewCompletedOnContentLoading = EdgeBrowser1ContentLoadingOnCreateWebViewCompleted = EdgeBrowser1CreateWebViewCompletedOnNavigationStarting = EdgeBrowser1NavigationStartingExplicitTop = 312ExplicitHeight = 190endobject Memo1: TMemoLeft = 1Top = 1Width = 531Height = 344Align = alTopLines.Strings = ('Memo1')ScrollBars = ssVerticalTabOrder = 1endend
end

1.3、运行效果(再也不想TWebbrowser那样不支持Bootstrap响应了)

2、与JavaScript交互

详见下篇继续分享:

附:本博客相关博文:

1、《RAD Studio 10.4.1的TEdgeBrowser与javascript交互-基于Chromium的Edge浏览器控件用法之二》

2、《Delphi Restful之客户端javascript与中间件服务器交互》

3、microsoft-edge开发工具之网络工具的使用

网络功能参考 - Microsoft Edge Development | Microsoft Docs

喜欢的话,就在下面点个赞、收藏就好了,方便看下次的分享:

RAD Studio 10.4.1新的基于Chromium的Microsoft Edge浏览器的TEdgeBrowser控件用法相关推荐

  1. 微软发布首版基于 Chromium 79 的 Edge 浏览器

    根据 softpedia 报道,微软正式发布第一个版基于 Chromium 79 的 Edge 浏览器. 在最近的更新中, Microsoft Edge Canary 版本升级到了 79.0.278. ...

  2. 基于Linux的Microsoft Edge浏览器

    关于Edge 近年来随着浏览器市场的变革,IE的地位越来越低,终于微软在Windows 10操作系统中推出了全新的Edge浏览器,但是在刚开始的阶段Edge浏览器并不友好,很多人都无法适应Edge的工 ...

  3. RAD Studio 10.4.1 Sydney 新增与改进内容介绍

    RAD Studio 10.4 Sydney-Release 1(也就是10.4.1).10.4.1基于10.4的功能集,增强了整个产品中的现有功能,并添加了新功能.可以将Delphi 10.4.1, ...

  4. Delphi RAD Studio 10.4.2 Sydney的新增与改进介绍(上)

    2021年2月24日发布RAD Studio 10.4.2 Sydney的更新版本. 10.4.2建立在10.4和10.4.1的功能集的基础上,增强了整个产品中的现有功能,并添加了新功能.RAD St ...

  5. Delphi RAD Studio 10.4 Sydney 新增和改进的功能简介

    RAD Studio 10.4 Sydney版本已经发布,主要有发下新增和改进功能: Delphi的新功能 Delphi Code Insight的重大改进 据官方说,RAD Studio 10.4是 ...

  6. 使用RAD Studio 10 Seattle创建自定义按钮样式

    在RAD Studio 10 Seattle中,我们对IDE中的集成样式设计器进行了许多增强.在今天的帖子中,我想我将介绍使用RAD Studio 10 Seattle创建自己的自定义按钮样式的步骤. ...

  7. Embarcadero推出RAD Studio 10.3.1

    一如我的猜测, Embarcadero选择在2月14日这个对Delphi最具意义的日子推出10.3的第1个更新版 10.3.1. 10.3.1在定义上是属于质量更新版, 这是说10.3.1最重要的功能 ...

  8. RAD Studio 10.4 for delphi XE Assigned和Nil的联系与区别

    RAD Studio 10.4 for delphi XE Assigned和Nil的联系与区别 一.原理 系统级别的函数System.pas : System.Assignedfunction As ...

  9. Delphi RAD Studio 10.4.2 Sydney的新增与改进介绍原版全文

    Delphi RAD Studio 10.4.2 Sydney的新增与改进介绍原版全文 1.What's New in RAD Studio 10.4.2---------10.4.2有何改变 Wha ...

最新文章

  1. Ruby中,:(ampersand colon)的用法
  2. CopyOnWriteArrayList源码分析
  3. 从易到难,针对复杂问题的无监督式问题分解方法
  4. 操作篇 isis协议实验
  5. 重新审视自己和自己的目标
  6. jsp通过易宝方式实现在线支付
  7. 易到用车:服务器遭到连续攻击 被索要巨额比特币
  8. UIBarButtonSystemItem 样式
  9. python turtle画简单树_大家用Python-turtle库作图画出过哪些漂亮的树哇 ?
  10. MySQL高可用之主备同步:javafor循环乘法表
  11. python字典类型可迭代_核心数据类型--字典
  12. 《CUDA C编程权威指南》——2.4节设备管理
  13. 图书管理系统的设计与实现
  14. 模拟电子技术基础第五版习题 视频讲解 模拟电子技术基础第五版答案
  15. 网页播放rtsp视频流最终方案
  16. FC1179U盘量产教程
  17. 跟我一起云计算(6)——openAPI
  18. Outlook Express 收发邮件出现0x800CCC0F错误代码解决方法
  19. channel的实现原理
  20. gdal-ogr2ogr空间数据转换

热门文章

  1. vscode撤销快捷键
  2. html之code标签和pre标签
  3. 这13个数学公式,3步搞定自然冷却散热器尺寸
  4. 前端JS数组问题: 数组去重, 字符串分割成数组, 数组拼接成字符串
  5. 微型计算机中常用的鼠标器有哪两类,试卷
  6. Function name must be a string PHP出现这样的无措提示原因
  7. UF超滤膜:超滤膜技术介绍
  8. VS2008安装失败原因!
  9. asp.net 关于CodeFile和CodeBehind
  10. 常见的RuntimeException异常有哪些?