tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^2: javascriptで生成されるリストをwebbrowserから操作できない
投稿日: 2015/07/01(Wed) 22:30
投稿者まゆぱん
>魔界の仮面弁士さん

ご回答ありがとうございます!
いつも色んなQAの回答を参考にさせて頂いています。


> 既定では IE7 モードのはずですが、意図的に IE11 モードに変更して利用されているのですね。
> エミュレーションモードは 11001 でしょうか、11000 でしょうか?

仰るとおりです。 IE11 でないと正常に表示されないサイトを扱うため IE11 モードに変更しています。
エミュレーションモードは 11001 を使用しています。


> select 要素の onchange は、「利用者が操作して選択肢が変更された時」に発生する
> イベントだからです。プログラムから変更した場合には、onchange は発生しません。
>
> https://msdn.microsoft.com/en-us/library/ms536912.aspx
> 》 To invoke this event, do one of the following:
> 》 ・Choose a different option in a select object using mouse or keyboard navigation.
> 》 ・Alter text in the text area and then navigate out of the object.
>
>  'デフォルトの動作モードであれば、この方法で動作しますが、
>  '今回は IE11 モードとのことなので、この方法では動作しません
>  'Dim listItem = select1.Children.OfType(Of HtmlElement).FirstOrDefault(
>  '   Function(opt) opt.GetAttribute("value") = "2078297513")
>  'select1.SetAttribute("selectedIndex", listItem.GetAttribute("index"))
>  ''listItem.SetAttribute("selected", "selected")
>  'select1.RaiseEvent("onchange")
>  
>  'IE11 モードの場合は、ユーザー操作をエミュレートすることで代用して下さい
>  select1.Focus()
>  SendKeys.Send(Space(1))
> -----
>
> IE7 モードであれば、<OPTION> の selected で選択しても、<SELECT> の selectedIndex で選択しても
> .RaiseEvent("onchange") が使えるのですが、IE8 モードで .RaiseEvent("onchange") する場合は
> <SELECT> の selectedIndex を使って選択する必要があります。
>
> IE9〜IE11 モードの場合は、そもそも .RaiseEvent("onchange") すら使えないため、
> キーボード操作もしくはマウス操作をエミュレートする必要があります。
>
> なお、現在のブラウザバージョンを確認する場合は
>  http://www.useragentstring.com/
> を表示させてみると良いでしょう。

非常にわかりやすく丁寧に教えて頂きありがとうございました。
IE のモードによってこんなにも挙動が違うんですね。とても勉強になりました。
(Linqで記述すると1行でまとめられてスッキリしますね、これも使えるように勉強したいと思います!)

IE8 モードにしたところ意図した動作をしてくれたのですが、やはりサイトが正しく表示されないので、
IE11 モードでキーボード操作をエミュレートする方法で作っていこうと思います。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。