>newcom objIE, "InternetExplorer.Application"
>ユーザーがurlファイルを開いたときにHSPでCOM操作しているIEを使用させない
>(IEのウインドウを再利用しないようにする)方法
おそらくコチラの方法でアプローチしていった方が良いような気はしますが、私のWindows10の環境では、urlファイルを実行してもedgeが立ち上がってしまい検証することができませんでした。
なので、
>axobj objIE, "Shell.Explorer.2",640,480
側の方を引き続き調べてみました。
下記スクリプトを実行してみてください。
#define DIID_DWebBrowserEvents2 "{34A715A0-6587-11D0-924A-0020AFC7AC4D}"
#define DISPID_DocumentComplete 259
axobj ieBrowser,"Shell.Explorer.2",640,480 //ieコンポーネント起動
comevent ieEvent, ieBrowser, DIID_DWebBrowserEvents2, *event //COMイベントの取得開始を登録
url = "http://www.iwebmethod.net/insider.net/aspnet/08/sample03.htm" // frame name=left でaspxを指定されたものを見つけてきた。
ieBrowser->"Navigate" url,,,,"" //指定URLに移動
stop
*event
// COMイベント処理
dispid = comevdisp(ieEvent) //イベントIDを取得
if dispid = DISPID_DocumentComplete : gosub *OnDocumentComplete //ドキュメントの読み込み完了時
return
*OnDocumentComplete
comevarg newurl, ieEvent, 1, 1 //URLを取得
if newurl == url {
oDocument = ieBrowser("Document") ;oだけだと分かりにくいので名前を分けました。
oFrames = oDocument("frames")
oLeft = oFrames("left")
oLeftDocument = oLeft("Document")
oLeftElements = oLeftDocument("getElementsByTagName","*") ;各HTMLタグ要素を取得
count = oLeftElements("length")
if count = 0 : return
tags=""
repeat count
node = oLeftElements("item", cnt)
tags+= node("nodeName")+", " ;HTMLタグ名を取得
if node("nodeName")=="HTML" :nodeHTML=node
loop
dialog tags,,"各タグ要素" ;各HTMLタグ要素を列挙
dialog nodeHTML("innerHTML"),,"htmlタグ中身" ;htmlタグの中身を表示
}
return
frame name=left でaspxを指定しているところを見つけてきました。
上記のスクリプトは、aspxファイルの中の各HTMLタグ要素を取得して表示しています。
url変数の中身をうまくいかないというURL先に変更してみてください。
問題なく動きますでしょうか。
また、列挙される物の中にbodyタグはありますか。
スクリプトでは、bodyがダメならばとhmtl要素の中身の表示も試みています。
> o=o("Document")
> o=o("body") //←ここでエラー
ということでしたので、ドキュメントの取得までは行っているのかな、ならaspxにbody要素がないんじゃないかな、と考えました。
ただ、
> newcom objIE, "InternetExplorer.Application"
では問題なかったんですよね?
なので違うとは思うんですけど、一応確認してみてください。。。
・・・というか今更ですけど、特定のaspxのurl先でのみのエラーですか?aspxなら全て全滅ですか?
支障がなければ、エラーが出てしまうURL先を教えて欲しいのですが。