WebBrowserからポップアップされたWindowの制御

回答済み WebBrowserからポップアップされたWindowの制御

  • 2012年2月17日 1:07
     
      コードあり

    WebBrowserによって表示されたボタンを押すと、

    ポップアップされたWindowが出てきました。

    上図にある「リンクタイトル」と、「リンクURL」に文字列をコピーしたいと思います。

    この時のタグは、

       <!-- リンクタイトル -->
        <input type="text" size="30" name="content_link__title" maxlength="255">
        <!-- リンクURL -->
        <input type="text" size="40" name="content_link__url" maxlength="255">
        <!-- 追加ボタン -->
        <input class="input-submit" type="submit" value="追加する">
    
    

    となっていました。

    VB.netで、これにテキストをコピーすべく

            Dim all As HtmlElementCollection = WebBrowser1.Document.All
            Dim forms1 As HtmlElementCollection = all.GetElementsByName("content_link__title")
            forms1(0).InnerText = "hoge"     'リンクタイトル
    
            Dim forms2 As HtmlElementCollection = all.GetElementsByName("content_link__url")
            forms2(0).InnerText = "hoge link"     'リンクURL
    

    としましたが、エラーとなってしまいました。

    どのようにしたら、「リンクタイトル」と「リンクURL」に

    文字列を挿入できますか。

    宜しくお願いします。

すべての返信

  • 2012年2月17日 1:21
     
     

    どんな操作をしたいのでしょうか? そしてどんなエラーになったのでしょうか?

    書かれたコードを実行すると、innerTextへの挿入なのでHTML的には

    <input type="text" size="30" name="content_link__title" maxlength="255">hoge</input>
    <input type="text" size="40" name="content_link__url" maxlength="255">hoge link</input>

    になりそうですが、これは意図したものですか? HTML的にやりたいことは

    <input type="text" size="30" name="content_link__title" maxlength="255" value="hoge">
    <input type="text" size="40" name="content_link__url" maxlength="255" value="hoge link">

    のはずで、書き込む場所がInnerTextでは間違っているかと。

  • 2012年2月17日 2:16
     
      コードあり

    ご返答を頂きまして、ありがとうございます。

    それと、言葉足りずですみません。 m(_ _)m


    >どんな操作をしたいのでしょうか?

    Form1にTextBoxがあり、これに書かれた文字列を

    同じForm1のWebBrowserによって表示された

    「リンクタイトル」と「リンクURL」にコピーしたいと思います。


    >どんなエラーになったのでしょうか?

    forms1(0).InnerText = "hoge"     'リンクタイトル

    この場所で、エラーが出てきました。

    「'0' の値は 'index' に対して有効ではありません。'index' は 0 と -1 の間でなければなりません。
    パラメーター名: index」


    HTMLタグは、既存のブログを解析した結果です。


    >書き込む場所がInnerTextでは間違っているかと。

    ・・・とすると、他に指定する方法はありますか?


    以上、宜しくお願いします。


  • 2012年2月17日 4:09
     
     
    このエラーの場合、 all.GetElementsByName("content_link__title") が目的とするタグを見付けられていません。HTMLの内容をもう一度調べ直す必要があります。例えば目的のタグは<iframe>による別ページだったりしませんか?
  • 2012年2月17日 4:36
     
     

    HTMLの内容をもう一度調べ直すと、確かに<iframe>がありました。

    この場合のVBのコードは

    webBrowser1.Document.Window.Frames........

    と書くようですが、いまいち分かりません。

    参考になりそうなコード or Webページを教えて頂けませんか。

  • 2012年2月17日 5:05
     
     回答済み

    難しいですね… WebBrowser.Documentは説明にもある通り、HTML ドキュメント オブジェクト モデル (DOM: Document Object Model)を返します。ここからはHTML + JavaScriptを書く際の window.document と同じオブジェクト操作になります。つまりリンク先の仕様に従ってプロパティやメソッドを呼び出すことになります。例えば、GetElementsByName()もきちんと仕様化されています。ただ、ところどころ仕様化されていないInternet Explorer独自のプロパティもあり、例えばinnerTextなんかもそうです。allとかframesとかもそうかな?

    さて、ではコードを書く際どうするか、Internet Explorerの独自拡張も織り交ぜながら書くのか、純粋にDOM仕様に沿って書くのか、そこから分かれます。まぁこの辺り明確に区別せずだらだらと並べている解説サイトも多数あります。

    あまり答えになっていませんが、

    • WebBrowser.Documentから先はDOMの操作になる
    • DOMの操作としてはJavaScriptによる解説サイトが多数ある(VBで書く際には先頭を大文字にする程度でよい)
    • Internet Explorer独自拡張があるが、区別せずに説明するサイトかなりの割合を占める

    ぐらいです。これといってお気に入りのサイトがないので、すみませんが、具体例は挙げられません。

    • 回答としてマーク taokato 2012年2月17日 7:15
    •  
  • 2012年2月17日 5:19
     
      コードあり

    ありがとうございます。

    一筋縄ではいかない見たいですね。

    WebBrowser1.Document.Window.Frames(0) _
    .Document.All("content_link__title") _
    .SetAttribute("value", "テストプログラム")

    これで文字列を、挿入出来ました。

    とはいえ、他の場面で通用するかは

    謎・・・、といった所でしょうか?