【问题标题】:Event is not getting fired事件没有被触发
【发布时间】:2015-02-05 14:38:09
【问题描述】:

我正在尝试使用来自TWebbrowserWebWorkerStartedWebWorkerFinished,但是这些事件根本不会被触发。

我怎样才能让这些事件发挥作用?我想看看从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.stackoverflow.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.

【问题讨论】:

  • 你把它们分配给组件了吗?
  • 您确定您导航到的页面实际使用了网络工作者吗?我的印象是这是页面脚本明确使用(或不使用)的东西。
  • @500-InternalServerError,我可能错了,但我认为 OP 不明白这个事件的含义,什么是 HTML WebWorker... +1 为你。

标签: delphi delphi-xe7 twebbrowser


【解决方案1】:

据记录 here

默认情况下,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 

这将导致由 TWebBrowser 包装的 Internet Explorer 实例在 IE11 模式下运行,支持 WebWorkers 等。在设置此值之前,您可能应该对已安装的 IE 版本进行某种健全性检查。有关有效条目的更多信息can be found on MSDN

导航到 StackOverflow 时,这仍然不会为我引发任何 WebWorker 事件(您确定它使用它们吗?)。作为验证测试​​,这个 WebWorkers 演示页面确实引发了 OnWebWorkerStarted 事件:

WebBrowser1.Navigate('https://whatwg.org/demos/workers/primes/page.html'); 

【讨论】:

    猜你喜欢
    • 2019-11-02
    • 2012-06-30
    • 2016-11-07
    • 2014-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多