将iFrame注入IE BHO

时间:2012-08-14 14:41:09

标签: delphi internet-explorer iframe bho

我正在开发一个IE BHO来拒绝某些特定的URL。当我找到一个目标网址时,我想在显示警告的网页上方打开一个iframe。要查找用户的URL,我正在使用BeforeNavigate2事件。当我找到目标网址时,我会创建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 ...有人可以帮我解决这个问题吗?谢谢!

1 个答案:

答案 0 :(得分:1)

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