none
JavaScriptを使ったポップアップウィンドウを表示しないようにしたい RRS feed

  • 質問

  • いつもお世話になります。
    VisualC# 2010を使ってWindows7で開発しています。
    WebBrowserについて質問があります。

    Form上にWebBrowserをはりつけ、インターネットにアクセスしています。
    JavaScriptを使ったポップアップウィンドウを表示しないようにしたいと考えています。

    htmlでのスクリプトは、次のようなものです。
    <script language="javascript">
    lbAlert('・予約した資料が届きました。ご確認ください。<br>'+' '+'\r\n'+' '+'\r\n'+' ','');
    submitFlg = true;
    var gamenid = document.LBForm.gamenid.value;
    if( gamenid != 'tiles.WMnuTop'){
     document.all.prev.innerHTML="<a href='#' class='goback' onclick ='javascript:back()'>戻る</a>";
    }
    </script>

    これに対して、
    private void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)        {
     HtmlElementCollection alearts = webBrowser.Document.GetElementsByTagName("script");
     foreach (HtmlElement aleart in alearts)
      if (aleart.OuterHtml != null && aleart.OuterHtml.Contains("予約した資料が届きました。"))
       aleart.OuterHtml = "";
    }
    と指定して、空にしようとしています。

    ところが、
    (1)DocumentCompletedすると、直後にJavaScriptが発動するようで、ポップアップが表示されてしまいます。
    (2)その後、この条件の部分がヒットするのですが、
    aleart.OuterHtml = "";
    にしても、空になりません。

    このような場合、どのような処理をしたら、ポップアップウィンドウを消すことができるか、ご示唆いただけないでしょうか。

    2012年11月27日 12:38

すべての返信

  • K.TakaokaさんのこのコメントによるとOnShowMessage()により制御できるそうです。
    2012年11月27日 13:41
  • 単純なサンプルを動かしてみましたが、キャットリリスさんがDocumentCompletedに記述しているコードをWebBrowserコントロールのNavigatedイベントに書くと上手く動いているように思えます。

    前提として、scriptタグがbodyタグの内側にある事が条件のようです(headタグの内側だと上手くいかない)

    2012年11月27日 13:50
  • t.jinさん、ありがとうございます。
    さっそく、Navigatedイベントを作成し、そちらで実行しました。
    いくつかのサイトで試したところ、うまくいくところもありましたが、いちばん実現したいと考えていた図書館のサイトでは、依然としてポップアップを表示する状態です。
    前提条件のほうがダメなのかと思って確認したところ、このページは、
    html
     head
     /head

     table
      thead
      /thead
      tbody
      /tbody

     /table

     script
      最初に提示した該当のスクリプト
     /script
    /html

    という順番でした。
    そもそもbodyタグが存在せず、スクリプトはbodyタグではなく、その外でした。
    このような場合には、対応方法はあるものでしょうか?

    2012年11月28日 2:04
  • t.jinさん、ありがとうございます。
    さっそく、Navigatedイベントを作成し、そちらで実行しました。
    いくつかのサイトで試したところ、うまくいくところもありましたが、いちばん実現したいと考えていた図書館のサイトでは、依然としてポップアップを表示する状態です。
    前提条件のほうがダメなのかと思って確認したところ、このページは、
    html
     head
     /head

     table
      thead
      /thead
      tbody
      /tbody

     /table

     script
      最初に提示した該当のスクリプト
     /script
    /html

    という順番でした。
    そもそもbodyタグが存在せず、スクリプトはbodyタグではなく、その外でした。
    このような場合には、対応方法はあるものでしょうか?

    2012年11月28日 2:24
  • デバッグ実行で次の1行のあとに、aleart に値は入ってきていますでしょうか?

    foreach (HtmlElement aleart in alearts)

    aleart のOuterHtmlにスクリプトが入ってきているようであれば、上手くいく気がします。

    ご参考までに、次のHTMLに対して実行したところポップアップは表示されないようでした。

    <html>
    <head>
    </head>
    <table>
    <thead>
    </thead>
    <tbody>
    ...

    </tbody>
    </table>
    <script language="javascript">
    alert('予約した資料が届きました。');
    </script>
    </html>


    • 編集済み t.jin 2012年11月28日 2:44 HTMLサンプルを修正
    2012年11月28日 2:29
  • 佐祐理さん、コメントありがとうございます。
    ご示唆いただいた質問のところ、ほとんど同様のことをされているなと思いました。
    質問するときには気づきませんでした。すみません。

    そちらを読んだのですが、まだわからないところがあります。
    -----------
    javascript の alert は UI オブジェクトの OnShowMessage イベントを作成しますので、OnShowMessage イベントでその表現を差し替えることができます。
    -----------
    とのことですが、具体的な手順はどのようになりますか?
    C# OnShowMessage()
    でGoogleで探して上位10サイトを見てみたのですが、それらしい情報を見つけることができませんでした。
    もしなにか情報をおもちでしたら、教えていただけると幸いです。

    2012年11月28日 2:31
  • そうですね、私も OnShowMessage() site:msdn.microsoft.com で検索したところ特にヒットしなかったので、Microsoftとしては非公開の、K. Takaokaさんのみが知る方法なのだと思います。

    別ツリーで議論されている方法ですが、JavaScriptの動作を知っているものとして、なかなか無理のある対処法だとは思います。

    2012年11月28日 3:55
  • そうですね、私も OnShowMessage() site:msdn.microsoft.com で検索したところ特にヒットしなかったので、Microsoftとしては非公開の、K. Takaokaさんのみが知る方法なのだと思います。

    IDocHostShowUI::ShowMessageのことかなぁ…? これで調べるとアラートを抑止するサンプル等が見つかります。

    2012年11月28日 4:06
  • t.jinさん、佐祐理さん、Hongliangさん、
    ちょっとこの件は、手にあまるようなので、とりあえずここで閉じます。

    ありがとうございました。

    t.jinさん、ちなみに、デバッグで、
    foreachのaleartに、該当するスクリプトは入っているのですが、やはりうまくいかないみたいです。

    2012年11月28日 14:11
  • なるほど、こちらのAnswer 1とかですね。作り方に関する詳しい説明はWebBrowser Customizationですね。

    関数名しか挙げられてなく、しかもその名称が間違っているとなるとさっぱりわかりませんでした。

    • 回答の候補に設定 佐祐理 2012年12月19日 3:57
    2012年11月28日 22:08