我正在尝试什么:
我需要一个 TWebBrowser,它总是放大(~140%)并将所有链接保存在同一个 webbrowser 中(即 _BLANK 链接应该在同一个浏览器控件中打开)。
我是怎么做的:
我已将FEATURE_BROWSER_EMULATION
in 注册表设置为 9999,因此网页使用 IE9 呈现。我已经确认这是有效的。此外,我正在全新安装的带有 IE9 的 Windows 7 上运行编译后的程序,并通过 Windows Update 进行了全面更新。
缩放:
procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var
ZoomFac: OLEVariant;
begin
ZoomFac := 140;
WebBrowser1.ExecWB(OLECMDID_OPTICAL_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER, ZoomFac);
end;
这完美地工作。
在同一浏览器控件中打开新窗口:
默认情况下,当 TWebBrowser 遇到设置为在新窗口中打开的链接时,它会打开一个新的 IE。我需要它留在我的程序/网络浏览器中。
我在这里尝试了很多东西。这对我有用:
procedure TFormWeb.WebBrowser1NewWindow3(ASender: TObject;
var ppDisp: IDispatch; var Cancel: WordBool; dwFlags: Cardinal;
const bstrUrlContext, bstrUrl: WideString);
begin
Cancel := True;
WebBrowser1.Navigate(bstrUrl);
end;
我取消了新窗口,而是导航到相同的 URL。
Internet 上各个页面上的其他来源建议我不要取消,而是将 ppDisp 设置为各种事物,例如WebBrowser1.DefaultDispath
orWebBrowser1.Application
和它们的变体。这对我不起作用。当我单击 _BLANK 链接时,没有任何反应。这是在两台计算机(Win7 和 IE9)上测试的。我不知道为什么它不起作用,因为这似乎适用于互联网上的其他人。也许这会解决问题?
现在的问题:
当我结合这两条代码时,它会中断!
procedure TForm1.Button1Click(Sender: TObject);
begin
WebBrowser1.Navigate('http://wbm.dk/test.htm');
// This is a test page, that I created. It just contains a normal link to google.com
end;
procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var
ZoomFac: OLEVariant;
begin
ZoomFac := 140;
WebBrowser1.ExecWB(OLECMDID_OPTICAL_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER, ZoomFac);
end;
procedure TForm1.WebBrowser1NewWindow3(ASender: TObject; var ppDisp: IDispatch;
var Cancel: WordBool; dwFlags: Cardinal; const bstrUrlContext,
bstrUrl: WideString);
begin
Cancel := True;
WebBrowser1.Navigate(bstrUrl);
end;
在运行时在浏览器中点击一个链接(无论是正常的还是_BLANK),都会产生这个错误:
First chance exception at $75F1B9BC. Exception class EOleException with message 'Unspecified error'. Process Project1.exe (3288)
如果我删除代码的任何一部分,它就可以工作(显然没有删除的代码)。
任何人都可以帮助我同时让这两件事工作吗?
谢谢你的时间!
更新:
现在这是正确捕获新窗口并将其保存在同一浏览器控件中的问题。据我所知,OnDocumentComplete 中的缩放代码与它无关。总的来说就是变焦。如果 WebBrowser 控件已被缩放(一次就足够了),NewWindow3 中的代码将失败并显示“未指定错误”。将缩放级别重置为 100% 无济于事。
通过使用缩放代码 (ExecWB),WebBrowser 中的某些内容“永远”发生了变化,这使得它与 NewWindow3 中的代码不兼容。
有人能弄清楚吗?
新代码:
procedure TForm1.Button1Click(Sender: TObject);
var
ZoomFac: OLEVariant;
begin
ZoomFac := 140;
WebBrowser1.ExecWB(OLECMDID_OPTICAL_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER, ZoomFac);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
WebBrowser1.Navigate('http://www.wbm.dk/test.htm');
end;
procedure TForm1.WebBrowser1NewWindow3(ASender: TObject; var ppDisp: IDispatch;
var Cancel: WordBool; dwFlags: Cardinal; const bstrUrlContext,
bstrUrl: WideString);
begin
Cancel := True;
WebBrowser1.Navigate(bstrUrl);
end;
尝试在单击 Button1 之前和之后单击链接。缩放后失败。