阻止webbrowser控件中的iframe?

时间:2013-09-08 17:54:32

标签: c# winforms .net-2.0 webbrowser-control

我在阻止webbrowser控件中的iframe时出现问题。目前我正在使用此代码:

foreach (HtmlElement x in ((WebBrowser)sender).Document.GetElementsByTagName("iframe"))
            {
                MessageBox.Show("iframe!"); //DEBUG
                x.OuterHtml = @"<iframe src=""about:blank"" frameborder=""0"" style=""display:none;""></iframe>";
//              x.OuterHtml = String.Empty; //gives the same result
            }

它可以工作但是当导航到www.popuptest.com时,应用程序因为此代码而完全冻结。它显示2“iframe!”关闭第二个消息框并冻结。 我在网页的源代码中找到了2个iframe(在该网站上显示的广告中)。这是导致它冻结的代码:

(a=document.createElement("IFRAME"),a.frameBorder=0,a.style.height=0,a.style.width=0,a.style.position="absolute",t=a,document.body&&(document.body.appendChild(a),a=t))&&(a=a.contentWindow)&&(r="1",a.document.open(),a.document.write("<!doctype html><html><head></head><body></body></html>"),a.document.close(),k(a.document))

我想这是因为框架是以不同的方式创建的?我在win7 / IE10和winXP / IE6上测试了它,结果是一样的。但是,在winXP上,它会崩溃并打开调试器而不是冻结,这就是我得到错误代码的方式。

是否有更好/更安全的方法来删除iframe的内容?

1 个答案:

答案 0 :(得分:1)

我会尝试使用Download ControlDLCTL_NO_FRAMEDOWNLOAD)禁用帧。 Here's how它可能会完成,虽然我自己没有尝试过。如果这适用于阻止帧,请告诉我们。