Chtmlview拦截新窗口的生成-NewWindow3

在使用chtmlview编写自己的浏览器的时候,如果不想点击某些链接生成新窗口,直接在原窗口或者自己新建窗口显示网页的时候,使用NewWindow3拦截并获取网页URL

1.首先在类的头文件中加入以下代码

void    NewWindow3(IDispatch **ppDisp, VARIANT_BOOL *Cancel, DWORD dwFlags, BSTR bstrUrlContext, BSTR bstrUrl);
DECLARE_EVENTSINK_MAP()

2.在cpp中加入以下代码

BEGIN_EVENTSINK_MAP(MyHtmlView, CHtmlView)
    ON_EVENT(MyHtmlView, AFX_IDW_PANE_FIRST, 273, NewWindow3, VTS_PDISPATCH VTS_PBOOL VTS_I4 VTS_BSTR VTS_BSTR)
END_EVENTSINK_MAP()

3.函数的实现

void MyHtmlView::NewWindow3(IDispatch **ppDisp, VARIANT_BOOL *Cancel, DWORD dwFlags, BSTR bstrUrlContext, BSTR bstrUrl)
{
    *Cancel = TRUE;
    Navigate2(bstrUrl);
}

其中,将Cancel赋值为TRUE,将不会自动用默认浏览器打开网页。

bstrUrl就是即将打开的网页URL

将得到的bstrUrl用来直接转入或者自己创建新窗口吧。

时间: 2024-07-29 03:56:43

Chtmlview拦截新窗口的生成-NewWindow3的相关文章

javaScript防止拦截新窗口打开页面

原文发布时间为:2009-05-04 -- 来源于本人的百度文章 [由搬家工具导入] 兼容IE.FF.GOOGLE。防止拦截。。。。 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>javaScript放拦截新窗口打开页面</title> </head> <body> <a id="tagOpenWin" target=&

JS~模拟表单在新窗口打开,避免广告拦截

说起广告拦截,这应该是浏览器的一个特性,它会将window.open产生的窗口默认为一个广告,将它进行拦截,但有时,这不是我们所希望的,有时,我们就是需要它在客户端的浏览器上弹出一个新窗口,以展示数据处理的更新结果,例如,一个创建商品的预览功能,它需要先保存数据,然后再在新窗口展示最新的信息,这种需求并不少,而大多数人的作法就是使用window.open去弹窗口,但它确实不是一种好的方式! 新方式来了 我们知道表单提交实际上可以把POST的结果响应到新窗口上,我们就是利用表单的这种性质,在JS中

window.open打开新窗口被浏览器拦截的处理方法

一般我们在打开页面的时候, 最常用的就是用<a>标签,如果是新窗口打开就价格target="_blank"属性就可以了, 如果只是刷新当前页面就用window.location.reload(), 在某些特殊情况下也要用到另外一种新窗口打开的方法,就是window.open(),这个方法有一个问题就是会被基本所有的浏览器所拦截,要收到点击确认打开才可以,这样的体验可以说是非常不友好的~~ 感觉像一个有病毒的程序~~ 所以我们如果一定要用这个方法,但是又不想其被浏览器拦截,

ajax请求响应中用window.open打开新窗口会被浏览器拦截的解决方式

一.问题描述 ajax 异步请求成功后需要新开窗口打开 url,使用的是 window.open() 方法,但是会被浏览器给拦截了,需要用户点下. 二.问题分析 浏览器之所以拦截新开窗口是因为该操作并不是用户主动触发的,所以它认为这是不安全的就拦截了,即使 ajax 回调函数中模拟执行 click 或者 submit 等用户行为(trigger('click')),浏览器也会认为不是由用户主动触发的,因此不能被安全执行,所以被拦截. 说明: 1.如果是在 <a href="javascri

Flash打开新窗口 被浏览器拦截 navigateToURL被拦截

众所周知,打开新窗口以前经常被用作弹出广告用,而随着浏览器发展,现在估计除了ie6之外,基本都有广告拦截功能,最基本就是拦截这种非人为的弹出新窗口.我对js研究不深,我所了解就是,必须是用户操作的处理过程中,用window.open才能顺利通过浏览器的拦截检查.同样地,在Flash中,也有很多类似的安全限制,必须是用户操作才能触发一些危险代码的执行(例如,打开文件选择框).  今天,在处理XXXX的时候,点击flash的按钮时,无法正常弹出新窗口.于是,今天专门好好研究一下这个问题.正好,前几天

Js打开新窗口拦截问题整理

一.js打开新窗口,经常被拦截 //js打开新窗口,经常被拦截 //指定本窗口打开,可以使用 window.open('http://www.tianma3798.cn', '_self'); //不指定或指定新窗口打开被拦截 window.open('http://www.tianma3798.cn'); window.open('http://www.tianma3798.cn', '_blank'); 二. 1.如果是用户点击操作,打开新窗口不被拦截 2.如果在ajax回调函数中调用打开新

js打开新窗口并且不被拦截

window.open是javascript函数,该函数的作用是打开一个新窗口或这改变原来的窗口,如果你直接在js中调用window.open()函数去打开一个新窗口,浏览器会拦截你,那么如何避免呢. 注意,只有直接使用js调用 window.open(url); 打开新窗口时,才会被拦截,如果是改变原理额窗口:window.open(url,'_self'); 则不会被拦截. 那么 js调用 window.open(url); 打开新窗口,如何才能不会浏览器拦截呢? 浏览器会拦截你,是认为你将

JavaScript打开新窗口被拦截问题

新窗口打开页面,一个很常用的效果,至于代码,一般第一反应都是这么写: window.open(url); 但是主流的浏览器都会拦截这种效果(可能这些年弹窗广告太多,如果浏览器不拦截,用户受不了) 为了避免弹窗被拦截,一般都是利用a标签来打开一个新的页面,利用a标签的target="_blank"属性,一般根据情况使用下面这两种方法: 1.由点击事件触发新窗口打开: ----当然可以直接在页面使用a标签,这里只是为下文做铺垫的啦! <a href="http://www.

异步请求后新窗口打开页面,会被浏览器拦截问题

需要在异步调用接口前,先打开新窗口: 在接口返回后,如果确定需要打开新窗口,则设置窗口的 href  地址: 如果不需要,则关闭窗口即可. 如: let newWin = window.open('') this.singleVisit(url, function (toUrl) { if (toUrl) { newWin.location.href = toUrl } }, function () { newWin.close() }) 这样能解决问题. 原文地址:https://www.cn