1

Web ブラウザー コントロールで 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 つ目のメッセージ ボックスを閉じると、メッセージ ボックスがフリーズします。Web ページのソース コード (その Web サイトに表示される広告) で 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 のコンテンツを削除するより安全な方法はありますか?

4

1 に答える 1