dポイントプレゼントキャンペーン実施中!

目的のタブページのオブジェクトを取得することに成功したのですが、質問があります。
コードはVBSで書いています。

Dim objIE
Set Shell=Wscript.CreateObject("Shell.Application")
for each tmp in Shell.Windows
if TypeName(tmp.document)="HTMLDocument" then'HTMLDocumentかつ
if tmp.document.title="Google" then'そのページのタイトルが「Google」なら
set objIE=tmp'代入
end if
end if
Next
if objIE="" then
WScript.Echo("目的のページが表示されてないっぽいです")
WScript.Quit
end if

'この時点で、objIEがその目的のページでのオブジェクト

ここで、
objIE.alert("hoge")とできないのはどうしてなのでしょうか?
alertはjavascriptの関数?だからですか??
でも、objIE.document.write("hoge")で、documentオブジェクトが使えるのはどうしてなんですか?
documentオブジェクトはjavascirptのオブジェクトじゃないんですか?

それともう1つ、上記コードの場合ですが、JSの場合
Shell.Windows.item(0)というので参照?できるっぽいですが、itemというメソッドはjavascirptだけのものなのでしょうか?vbsでは使えないのですか?何故なんですか?同じcomオブジェクトを参照してるんじゃないんですか?(?)
どのオブジェクトがどれで、どのメソッドがどれなのかわからなくなります。

あと1つだけ!
上記コードでの、tmp.documentとはなんなのでしょうか?HTMLDocumentとは・・w

頭が混乱してます。どなたか回答よろしくお願いいたします。

A 回答 (1件)

≫alertはjavascriptの関数?だからですか??



自分もなんとなく「objIE直属の関数は使えない」という認識でいましたが、
改めて調べてみると、
objIE.document.parentWindow.alert("test")
とすることで呼び出せるということを知りました。

alertはブラウザのwindowオブジェクトの関数ですが、
このwindowとobjIEの内部的な違いで直接は呼び出せないが、
documentからwindowへ逆にたどることで使えるということのようです。

≫itemというメソッドはjavascirptだけのものなのでしょうか?vbsでは使えないのですか?

使えます。
For i = 0 to Shell.Windows.Count - 1
Set tmp = Shell.Windows.Item(i)
とすれば同じになります。
VBSでは1行で書けてわかりやすいのでFor Eachが好まれるのだと思います。

tmp.document はブラウザのJavaScriptのdocumentと同じです。
HTMLDocumentは形式です。
VBで Dim 変数名 As の後ろに書くのと同義です。

Shell.Windowsにはエクスプローラなども含まれます。
試しにマイコンピュータを開いた状態で、Forの後ろに
WScript.Echo TypeName(tmp.document)
と入れて実行してみてください。
HTMLDocument以外のものが表示されるはずです。

エクスプローラでは tmp.document.title が使えないので
まずIEを特定するために最初に型判定をしているのです。
    • good
    • 0
この回答へのお礼

すべての疑問が解決しました。ありがとうございました!!

お礼日時:2012/08/09 18:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!