Событие не начинается
Я пытаюсь использовать 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');