お世話になっています。
WebBrouserでFrame分割されているページを読み込んで、
FrameB内にあるInput(例えばNAME='TEXT1')に
入力内容(例えば「1234」)をセットする方法は
あるでしょうか?
ちなみに、Frame分割されていないページ
では以下のように制御しています。
DIM OBJ AS Variant
Dim OBJDocument as HTMLDocument
Set OBJDocument = Main.WebBrowser1.Document
Set OBJ = OBJDocument.getElementsByName("TEXT1").Item
If OBJ.Name = "TEXT1" Then
OBJ.Value = "1234"
End If
です。
上記のような制御をFRAME分割されているページ
にもできるでしょうか?
よろしくお願いいたします。
Set OBJDocument = Main.WebBrowser1.Document.frames("FrameB").Document
Set OBJ = OBJDocument.getElementsByName("TEXT1").Item
If OBJ.Name = "TEXT1" Then
OBJ.Value = "1234"
End If
だとどうでしょうか(未確認)?
だいさんありがとうございます。
自分で作ったテスト用のページでは、上記ロジックで
うまいこといきました。
しかし、制御したい外部のページで、実行してみると
アクセスが拒否されました。とのエラーになりました。
これって、どうしようもないんですかね?
セキュリティが掛かっているのでしょうか。
各フレームのドメインを確認してみてください。
http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200401/04010002.txt
http://support.microsoft.com/default.aspx?scid=kb;ja;167796
アクセスが拒否されましたとなるのはまだそのフレームのドキュメントを
読み込んでいないためにおこるのだと私は考えています。
全てのドキュメントが完了したというのを知る方法があれば、その時点で
framesコレクションでフレームを参照すればうまくいくと思いますが、
全てのドキュメントが完了したというのをどうやって知るかがわかりません
ですので、あまりいい解決方法ではないですが、
私の場合、DocumentCompleteイベントで処理を書いております。
ですので、このイベントが発生してもし、エラーが発生した場合は、
このフレームが読み込まれていないということで処理を行わないように
On Error ステートメントで終了するようにしています。
On Error GOTO EXT
Set OBJDocument = Main.WebBrowser1.Document.frames("FrameB").Document
お世話になります。
ドメインは同じだったんですけど、
操作したいフレームのURLはhttpsでした。
これは、やはりIEの制限に引っかかるんでしょうね?
> 操作したいフレームのURLはhttpsでした。
「フレームセット」を持つURLはhttpsで、
その中に表示されるURLについては、httpだという事ですか?
それとも、全てのURLがhttpsなのでしょうか?
Dim objInput as Object
Set objInput WebBrowser.Document.frames(0).Document.getElementsByTagName("INPUT")
Text1.Text=objInput(0).Value
とすれば取得できます。
魔界の仮面弁士さん、
言葉が足りなくてスミマセン。
フレームセットとフレーム1、フレーム2はhttpで、
フレーム3が、httpsです。
値を入れたいInputがあるフレームはフレーム3です。
コンボさんありがとうございます。
しかし、値を取得するのではなく、セットしたいです。
上記コードでは「アクセスを拒否されました」エラーが発生してしまいます。
httpsでも同様のやり方でいいのですが、まずframes.lengthでフレームの個数を確認してみてはどうですか?複数のフレームが1つのフレームの集合体であることも考えられます。その場合は、frames(1).frames(0)のような形になります。あとは、
Me.Caption=WebBrowser.Document.frames(0).Document.location.hrefとしてフレームのURLを調べてみましょう。
> フレームセットとフレーム1、フレーム2はhttpで、
> フレーム3が、httpsです。
> 値を入れたいInputがあるフレームはフレーム3です。
それだと、別ドメインと同じ扱いになりますよ。
例えば、一番外側にあるHTMLが、
<frameset cols="50%,*">
<frame src="http://○○○/frame1.htm" name="frame1">
<frameset rows="50%,*">
<frame src="http://○○○/frame1.htm" name="frame2">
<frame src="https://○○○/frame1.htm" name="frame3">
</frameset>
<noframes></noframes>
</frameset>
のようになっていたとします。ドメインは全く同一です。
もし、上記フレームセットのURLが、「http://○○○/F.htm」だったとすると、
Frame1 と Frame2 は操作できますが、Frame3は操作できない事になります。
あるいは、フレームセットのURLが、「https://○○○/F.htm」だったとすると、
Frame1 と Frame2 が操作できませんが、Frame3は操作可能です。
> しかし、値を取得するのではなく、セットしたいです。
取得でも設定でも、状況は一緒です。
別ドメインの場合、殆どのプロパティやメソッドへのアクセスが禁止されます。
もし、フレームを組む必要が無ければ、フレーム3の内容だけを
WebBrowserに表示させるようにしてみては如何でしょうか?
そうですか。
魔界の仮面弁士さんのおっしゃるとうりのページ構成になっています。
今回はあきらめます。
魔界の仮面弁士さん、だいさん、さんさん、コンボさん、いろいろとありがとう
ございました。
また、よろしくお願いします。