我正在开发一个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 ...有人可以帮我解决这个问题吗?谢谢!
答案 0 :(得分:1)
该页面尚未加载到BeforeNavigate2
。您可以尝试在DocumentComplete
中执行此操作。将IWebBrowser2
对象存储在BHO的SetSite
方法中并检查pDisp
是否是同一个对象(首先是QI到IWebBrowser2
)以验证该页面是否已加载到主浏览器中窗口(而不是框架)。然后你应该能够像当前代码一样注入iframe。我不知道Delphi,所以也许这就是为什么我不理解IE.Document
是什么,但你可能应该使用Document
对象的IWebBrowser2
属性。