//我现在采用以下方法来接受新的窗口
procedure TForm1.WebBrowserNewWindow2(Sender: TObject;
var ppDisp: IDispatch; var Cancel: WordBool);
begin
ppDisp := NewWebBrowser.window.DefaultDispatch;
end;但是我想实现屏蔽掉弹出窗口和某些指定url地址的窗口,应该怎么做呢?谢谢
procedure TForm1.WebBrowserNewWindow2(Sender: TObject;
var ppDisp: IDispatch; var Cancel: WordBool);
begin
ppDisp := NewWebBrowser.window.DefaultDispatch;
end;但是我想实现屏蔽掉弹出窗口和某些指定url地址的窗口,应该怎么做呢?谢谢
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
beginend;
但是如果要屏蔽弹出窗口呢?应该没有办法只是窗口是以什么方法打开的,
如果是window.open(url)方式打开的窗口,有没有办法判断呢?
vStatusText: WideString;
vUpdating: Boolean;procedure TForm1.FormCreate(Sender: TObject);
begin
WebBrowser1.Navigate('http://www.sina.com.cn');
end;procedure TForm1.WebBrowser1StatusTextChange(Sender: TObject;
const Text: WideString);
begin
vStatusText := Text;
end;procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;
var ppDisp: IDispatch; var Cancel: WordBool);
begin
vUpdating := True;
WebBrowser2.RegisterAsBrowser := True;
ppDisp := WebBrowser2.Application;
end;procedure TForm1.WebBrowser2BeforeNavigate2(Sender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
begin
Cancel := vUpdating;
if URL = vStatusText then //用户点击
ShellExecute(Handle, nil, 'IEXPLORE.EXE',
PChar(string(URL)), nil, SW_SHOW);
vUpdating := False;
end;
有一些思路了。不过我觉得基于窗口打开方式的过滤好像没有特别好的方法。
比如对于Window.open(url),这种打开方式,
有没有办法判断是页面中自动打开的还是用户操作(比如点击一个按钮)打开的呢。
一般情况广告窗口都是在主页面载入候自动弹出来的,这种应该过滤。
如果用户是主动行为的,虽然也可能是window.open(url)打开的,这种确不应该过滤。有什么好的的思路吗?
谢谢!
const Text: WideString);
begin
vStatusText := Text;
//如果是用户主动行为,那最后一个状态字符就是用户点击的连接
end;
procedure TForm1.WebBrowserBeforeNavigate2(Sender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
begin
if(statBottom.SimpleText = URL) then
ShowMessage(URL);
end;如果我是点击连接,上面判断成立,
如果我是点击按钮导致页面跳转或者弹出,这个判断是不成立的