环境:VS2005 C# winForm XP IE8以我经验,两种情况可以产生newWindow3事件:
1.点击网页中超链接。
2.JS执行window.open第一种情况下,将Cancel赋true就可以取消导航。第二种情况则不行,你可以选择自己打开这个窗口,如果你不打开,那么IE(默认浏览器)会替你打开,Cancel赋true也没用。(不信你试试:http://v.shentime.com/w/41aos0R3qe.html)为了"屏蔽"弹出窗口,我采取办法是用一个隐藏的webbrowser来打开它,这样视觉上看不见了,但如果弹出窗口有声音,还是能听见。更糟糕的是,有些网页内部响应了onunload事件,在网页关闭时再打开一个网页。这种行为纯粹就是赤裸裸的广告甚至非法行为了。而且我目前没有发现任何方法可以捕获并终止它,newWindow3事件也不被触发了。请问,如果让webBrowser禁用js,是否网页就不会再执行onunload事件函数?如果可以,小弟求一个webBrowser禁用js的示例代码。

解决方案 »

  1.   

    WebBrowser有个弹出新窗口之前触发的事件,利用这个事件可以防止自动弹出。
      

  2.   

    有进展,可以成功禁止js等了
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Diagnostics;
    using System.Runtime.InteropServices;
    using System.Windows.Forms;
    using Ricciolo.PaperBoy.UI.Interop;namespace Ricciolo.PaperBoy.UI
    {
        [ComVisible(true)]
        public class WebBrowserController : IOleClientSite
        {        private WebBrowser webBrowser;        private const int DISPID_AMBIENT_DLCONTROL = -5512;
            private bool clientSiteSet = false;        public WebBrowserController(WebBrowser webBrowser)
            {
                this.webBrowser = webBrowser;
                this.webBrowser.Navigating += new WebBrowserNavigatingEventHandler(webBrowser_Navigating);
            }        void webBrowser_Navigating(object sender, WebBrowserNavigatingEventArgs e)
            {
                // Only first time
                if (!clientSiteSet)
                {
                    this.SetClientSite();
                    clientSiteSet = true;
                }
            }        public void SetClientSite()
            {
                ((IOleObject)webBrowser.ActiveXInstance).SetClientSite(this);
                ((IOleControl)webBrowser.ActiveXInstance).OnAmbientPropertyChange(DISPID_AMBIENT_DLCONTROL);
            }        [DispId(DISPID_AMBIENT_DLCONTROL)]
            public int setFlags()
            {
                Debug.WriteLine("setFlags");
                //return 0;
                return (int)(DLCTL.SILENT | DLCTL.FORCEOFFLINE | DLCTL.NO_BEHAVIORS | DLCTL.NO_CLIENTPULL | DLCTL.NO_DLACTIVEXCTLS | DLCTL.NO_FRAMEDOWNLOAD | DLCTL.NO_JAVA | DLCTL.NO_RUNACTIVEXCTLS | DLCTL.NO_SCRIPTS);
            }        #region IOleClientSite        int IOleClientSite.SaveObject()
            {
                return 0;
            }        int IOleClientSite.GetMoniker(int dwAssign, int dwWhichMoniker, out object moniker)
            {
                moniker = null;
                return 0;
            }        int IOleClientSite.GetContainer(out IOleContainer container)
            {
                container = null;
                return 0;
            }        int IOleClientSite.ShowObject()
            {
                return 0;
            }        int IOleClientSite.OnShowWindow(int fShow)
            {
                return 0;
            }        int IOleClientSite.RequestNewObjectLayout()
            {
                return 0;
            }        #endregion
        }
    }
      

  3.   

    “糟糕的是,有些网页内部响应了onunload事件,在网页关闭时再打开一个网页。这种行为纯粹就是赤裸裸的广告甚至非法行为了。而且我目前没有发现任何方法可以捕获并终止它,newWindow3事件也不被触发了。

    这时候应该会有新的进程出现,找到并且Kill掉。