【发布时间】:2016-06-12 19:56:17
【问题描述】:
我的 TWebBrowser 组件在重定向方面存在问题。下面是显示 Google 图片搜索的代码。当代码运行时,用户会看到一个缩略图,下面是链接:“查找此图像的其他尺寸”。如果单击该链接,则会显示匹配的图像。如果用户随后点击其中一张图片,浏览器将在窗口中间显示一个扩展的黑带,让用户可以访问两个按钮:“访问页面”和“查看图片”:
问题从这里开始。如果我单击“查看图像”按钮,此应用程序将启动一个 Internet Explorer 窗口显示消息:
重定向通知
上一页正在将您发送到...
我该如何阻止这种情况?我不希望在我的 Delphi 应用程序上弹出 IE 窗口,也不希望出现此“重定向通知”。我希望重定向出现在触发重定向的主窗体的 TWebBrowser 中。
Unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.OleCtrls, SHDocVw,
urlmon;
type
TForm1 = class(TForm)
WebBrowser1: TWebBrowser;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
UserAgent : AnsiString;
begin
UserAgent := 'Mozilla/5.0 (compatible, MSIE 11, Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko';
UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, PChar(UserAgent), Length(UserAgent)+1, 0);
WebBrowser1.navigate('http://images.google.com/searchbyimage?site=search&image_url=https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_116x41dp.png');
end;
end.
【问题讨论】:
-
你想对弹出窗口做什么?阻止它,还是在应用程序的窗口中显示它?
-
我希望重定向发生在 WebBrowser1 组件中,而不是在用户的默认 Web 浏览器中。
-
从技术上讲,它是一个带有重定向页面的弹出窗口。因此,您需要创建一个带有浏览器组件的第二个表单。您可以使用
OnNewWindow2事件来检测弹出窗口。 -
就像我说的,我不希望上述 Google 搜索产生两个或三个或更多窗口。我希望通过单击“查看图像”按钮产生的目标网站出现在启动重定向的同一 TsWebBrowser 中。
-
这个要求应该在问题中。无论如何,如果你想这样做有点麻烦,我会调整我的答案
标签: delphi