Событие не начинается

Я пытаюсь использовать WebWorkerStarted а также WebWorkerFinished от TWebbrowser однако события просто не запускаются вообще.

Как я могу заставить эти события работать? Я хочу увидеть, с каких рабочих потоков запускаются TWebbrowser,

unit Unit2;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.OleCtrls, SHDocVw;

type
  TForm2 = class(TForm)
    WebBrowser1: TWebBrowser;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure WebBrowser1WebWorkerFinsihed(ASender: TObject; dwUniqueID: Cardinal);
    procedure WebBrowser1WebWorkerStarted(ASender: TObject; dwUniqueID: Cardinal; const bstrWorkerLabel: WideString);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
  WebBrowser1.Navigate('www.stackru.com');
end;

procedure TForm2.WebBrowser1WebWorkerFinsihed(ASender: TObject; dwUniqueID: Cardinal);
begin
  // does not fire
end;

procedure TForm2.WebBrowser1WebWorkerStarted(ASender: TObject; dwUniqueID: Cardinal; const bstrWorkerLabel: WideString);
begin
  // does not fire
end;

end.

1 ответ

Решение

Как задокументировано здесь:

По умолчанию TWebBrowser использует режим стандартов IE7, даже если среда выполнения установила последнюю версию IE (например, IE11).

WebWorkers были введены в IE10, поэтому вы должны запустить IE в более актуальном режиме. Необходимо установить как минимум два ключа реестра (больше, если поддерживается оба 32/64 бита):

HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER) 
  {\Wow6432Node}
  \SOFTWARE
  \Microsoft 
  \Internet Explorer
  \Main
  \FeatureControl
  \FEATURE_BEHAVIORS
     {NEW DWORD ->  'YourApplication.exe'
     {    VALUE -> 1  

Также (например, режим IE11)

  HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER) 
  {\Wow6432Node}
  \SOFTWARE
  \Microsoft 
  \Internet Explorer
  \Main
  \FeatureControl
  \FEATURE_BROWSER_EMULATION
     {NEW DWORD ->  'YourApplication.exe'
     {    VALUE ->  0x2AF8 

Это приведет к тому, что экземпляр Internet Explorer, обернутый TWebBrowser, будет работать в режиме IE11, поддерживая WebWorkers и т. Д. Перед установкой этого значения вы, вероятно, должны выполнить какую-то проверку работоспособности установленной версии IE. Более подробную информацию о действительных записях можно найти на MSDN.

Это до сих пор не вызывает WebWorker события для меня при переходе к Stackru (вы уверены, что он использует их?). В качестве проверочного теста эта демонстрационная страница WebWorkers поднимает OnWebWorkerStarted событие:

WebBrowser1.Navigate('https://whatwg.org/demos/workers/primes/page.html'); 
Другие вопросы по тегам