TWebBrowser禁止彈出Alert對話方塊

一劍平江湖發表於2013-12-10

以前介紹過通過編寫Webbrowser1的OnDocumentComplete事件響應程式碼可以攔截網頁彈出的Alert等對話方塊,程式碼如下:

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  ((Sender as TWebBrowser).Document as IHtmlDocument2).parentWindow.execScript('window.alert=function(){}''javascript');
end;

但是此方法對於含有框架的網頁,而Alert對話方塊又是由子框架中的網頁尾本彈出的,是無法攔截的。原因是:雖然每個框架網頁文件載入完成都會引發OnDocumentComplete事件,但傳入的Sender引數始終是WebBrowser1本身,該事件響應程式碼對子框架中的網頁文件無效。注意到傳入的第二個引數pDisp是包含了載入完成的框架的介面,通過這個介面可以獲取框架網頁的文件的引用,所以利用該引數進行處理就能真正攔截網頁彈出的Alert對話方塊,具體程式碼如下:

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
var
  iWB: IWebBrowser2;
begin
  if
 pDisp.QueryInterface(IID_IWebBrowser2, iWB) = s_ok then
  begin

    (iWB.Document as IHTmlDocument2).parentWindow.execScript('window.alert=function(){}','javascript');
  end;
end;

以上程式碼需引用單元:MsHtml

相關文章