0

我正在开发一个 IE BHO 来拒绝某些特定的 URL。当我找到一个目标 URL 时,我想在显示警告的网页上方打开一个 iframe。要查找用户的 URL,我使用了 BeforeNavigate2 事件。当我找到目标 URL 时,我将创建 iframe。所以现在的代码是:

procedure DoBeforeNavigate2(
               const pDisp: IDispatch;
               var URL: OleVariant;
               var Flags: OleVariant;
               var TargetFrameName: OleVariant;
               var PostData: OleVariant;
               var Headers: OleVariant;
               var Cancel: WordBool
               );
var
Document: IHTMLDocument2;
iFrame: IHTMLElement;
begin
  Document:= IE.Document as IHTMLDocument2;
  iFrame:= Document.createElement('iframe');
  iFrame.setAttribute('src', 'http://www.google.com/', 0);
  iFrame.setAttribute('id', 'iFrame', 0);
  iFrame.setAttribute('style', 'position: fixed; left: 0px; top: 0px; border: 0px; width: 100%; height: 100%; background-color: white', 0);
end;

它应该在所有网站之上用 google.com 打开一个 iframe,但它只会使 IE 崩溃......有人可以帮我解决这个问题吗?谢谢!

4

1 回答 1

1

该页面尚未加载BeforeNavigate2。您可以尝试在DocumentComplete. 将IWebBrowser2对象存储在 BHO 的SetSite方法中并检查它pDisp是否是同一个对象(QI 到IWebBrowser2第一个)以验证页面是否加载到主浏览器窗口(而不是框架)中。然后您应该能够像在当前代码中一样注入 iframe。我不知道 Delphi,所以也许这就是为什么我不明白什么IE.Document是,但你可能应该改用对象的Document属性IWebBrowser2

于 2012-09-27T16:33:30.007 回答