対象のすべての要素にイベント ハンドラーをアタッチする必要があります。すべての要素に関心がある場合は、すべての要素をループする必要があります。
var
All: IHTMLElementCollection;
Element2: IHTMLElement2;
i: Integer;
begin
Handler:= TEventObject.Create(Self.EventHandler);
All:=(WebBrowser1.ControlInterface.Document as IHTMLDocument2).All;
for i:=0 to All.Length-1 do
begin
Element2:=All.item(i,EmptyParam) as IHTMLElement2;
Element2.AttachEvent('onmouseenter', Handler);
end;
end;
したがって、理想的な世界ではDocumentComplete
、関心のあるドキュメントを受け取った後にハンドラーをアタッチし、BeforeNavigate
.
次の点に注意する必要がありますが、いくつかの問題が発生する可能性があります。
- ドキュメントの読み込みが完了しない場合があります (これは、一部の広告サーバーがサービスを提供していないときに広告を含むフレームが原因であることが多いため、フレームによってメイン ドキュメントが
DocumentComplete
.
- スクリプトはページを変更し、イベント ハンドラーがアタッチされていない要素を追加する可能性があります。
- 手動で
FRAMEs
/に入りIFRAMEs
、そこにハンドラーをアタッチする必要があります
また、あなたのアプローチと同じくらい簡単になることを願っています。これにより、この手間を大幅に省くことができます。