タイトル : 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 モードでキーボード操作をエミュレートする方法で作っていこうと思います。 |