Jump to content
Incus J

TWebBrowser Edge Engine Unavailable

Recommended Posts

I'm unsure how to get FMX TWebBrowser to use the Edge engine instead of the older IE engine.

 

I've set its WindowsEngine property to EdgeOnly (Delphi 11).  But I'm seeing a runtime error "Edge browser engine unavailable".

 

Edge is installed.  I think in the past a .dll file was required (?)  I'm not sure whether this is still the case.  After a Google search I looked in Delphi's Redist folder - but can't see anything that looks promising there.

 

(On a vaguely related note - is there a way to z-order web controls in FMX?  I'd like to place some controls so that they partially overlap TWebBrowser - appear on top of the web content - but they get clipped.)

Share this post


Link to post

No I hadn't - now installed, thank you!

 

After dropping WebView2Loader.dll into the app folder, the error message has changed to "Failed to create instance of Edge browser engine"

(The DLL file is version 1.0.664.37).  That suggests the Edge engine is available though.  It is failing here:

 

procedure TWinNativeWebBrowser.InitializeWebView;
begin
  ...
  // Create the environment
  var hr := CreateCoreWebView2EnvironmentWithOptions(PChar(BrowserExecutableFolder), PChar(UserDataFolder), nil,
    Callback<HResult, ICoreWebView2Environment>.CreateAs<ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler>(
      CreateEnvironmentCompleted));
  if not ProcessHResult(hr) then
  begin
    FBrowserControlState := TBrowserControlState.Failed;
    DoCreateWebViewCompleted(False);
  end;
end;

 

BrowserExecutableFolder and UserDataFolder both appear to be empty - so I need to check whether that is significant.  

ProcessHResult(hr) is returning False for a hr value of -2147024894.

Edited by Incus J

Share this post


Link to post

I think I'm slowly beginning to get a glimmer of understanding - it's slightly more complex than I anticipated.  As well as the EdgeView2 SDK, I've also downloaded and expanded Microsoft's Fixed-Version-Runtime of WebView2, and placed the resulting folder(s) inside my app folder.  So I think I now have all the ingredients.

 

TWebBrowser will need to know where this Fixed-Version-Runtime folder is.  How do I set a path to this in FMX TWebBrowser?  There is the BrowserExecutableFolder property which I suspect is for this purpose.  It is defined in the FMX.WebBrowser.Win unit:

TEdgeBrowserHelper = class helper for TWinNativeWebBrowser
...
property BrowserExecutableFolder: string read GetBrowserExecutableFolder write SetBrowserExecutableFolder;

But I've yet to discover exactly how this helper attaches to TWebBrowser itself - BrowserExecutableFolder is not a property exposed in the Object Inspector.  Presumably the private field FWeb references.

 

Do I somehow need to cast my TWebBrowser instance to a TWinNativeWebBrowser at runtime in order to set this property?  All of this seems private - the types are declared in the unit implementation section.  I must be expected to access this some other way.

 

How do I ensure the BrowserExecutableFolder property is set to the correct path prior to TWebBrowser attempting to initialise its view?

Edited by Incus J

Share this post


Link to post

The way of deployment you have selected (local, non-updating files) is not the most common.

 

I'd recommend to spend the five minutes to read about the different deployment options here:

Distribute a WebView2 app and the WebView2 Runtime - Microsoft Edge Development | Microsoft Docs

(Strongly recommended to read the full page)

 

For setting the path you have placed the files in, you can use CreateCoreebView2EnvironmentWithOptions(..), but you may also use simple environment variables (see link).

 

As as third way, there already appear to be handy wrappers like the one you have found, but unfortunately, they haven't even written documentation for the VCL version that already exists since 10.4

https://docwiki.embarcadero.com/Libraries/en/Vcl.Edge.TEdgeBrowserHelper.BrowserExecutableFolder

  • Thanks 1

Share this post


Link to post

Thank you - I'm currently reading.

 

Yes, I'm using Delphi's built in FMX TWebBrowser control - which has a WindowsEngine property to select the Edge engine at design time.  I just haven't figured out how to get it to work at runtime.

 

It is interesting that the VCL TEdgeBrowser control exposes the BrowserExecutableFolder property in the Object Inspector at design time.  But FMX TWebBrowser does not.  I wonder whether that is an intended or unintended omission?

Share this post


Link to post

I think I've got it working by installing the Evergreen-Standalone version of WebView2.  So it could simply be that the FMX TWebBrowser doesn't support the Fixed-Version of WebView2 currently.

Share this post


Link to post

hi

I am also having this error whereby Microsoft Edge WebView2 Runtime is installed as shown in Programs and Features but Delphi 11.1 will show an exception as shown in the pic

please advise

 

regards

chris

 874694584_Screenshot2023-11-03at5_16_48PM.thumb.png.35bb02be163acd67aa575fad11550acf.png

Share this post


Link to post

hi, 

i am using the Twebbrowser component to load a page which i can see it from microsoft edge and chrome

but it was not able to be displayed on the TWebbrowser.

Any ideas on how to debug it. i think its still using IE but i am trying to use EdgeIfAvailable but Edge engine is not found if i set the EdgeOnly option

where can i find the webview2loader.dll? i downloaded the Evergreen standalone as well as the Fixed version. Expanded the Fixed version but cant find this file

 

regards

chris

Share this post


Link to post

hi

i managed to find it. must download the EdgeView2 SDK from Getit.

From there get the webview2load.dll and copy it to my app directory.

 

thanks

chris

Share this post


Link to post

Hi

I have another question.

For Windows x86 and x64, we will need to copy the webview2load.dll to the app directory.

How about linux? what are the files that i need to copy or attach to my app directory?

The windows webview2load.dll is found in C:\Program Files (x86)\Embarcadero\Studio\22.0\Redist\win64 for 64bit deployment and C:\Program Files (x86)\Embarcadero\Studio\22.0\Redist\win32 for 32bit deployment.

Do i attached the entire C:\Program Files (x86)\Embarcadero\Studio\22.0\Redist\linux64 directory files when i deploy for linux when using TWebBrowser in Linux?

 

please advise

 

regards

chris

 

Edited by ChrisChuah

Share this post


Link to post
12 minutes ago, ChrisChuah said:

Has anyone tried out this CEF4Delphi

I don't want to be a dick, but entering "CEF4Delphi" into the search box 🔍 in the upper right corner might reveal the answer

image.png.57dcee647e1be9acb2cde4d3423acd5c.png

Share this post


Link to post
4 hours ago, ChrisChuah said:

Hi

Has anyone tried out this CEF4Delphi

 

https://github.com/salvadordf/CEF4Delphi

 

It seems it can embed chromium based browser into Delphi App and support for Linux

 

Please advise

 

regards

chris

 

Yes. CEF4Delphi works on Windows, Linux and macOS.

 

There are some unresolved issues in Linux but it works :

https://github.com/salvadordf/CEF4Delphi/issues?q=is%3Aissue+is%3Aopen+label%3ALinux

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×