【问题标题】:Inject iFrame into IE BHO将 iFrame 注入 IE BHO
【发布时间】:2012-09-28 00:33:30
【问题描述】:

我正在开发一个 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 崩溃...有人可以帮我解决这个问题吗?谢谢!

【问题讨论】:

    标签: delphi internet-explorer iframe bho


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-07
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      • 2012-08-30
      • 2013-04-18
      • 1970-01-01
      相关资源
      最近更新 更多