「IEコンポーネントでスクロール量取得が正常に行かないことがある」
という不具合が見つかりました。
ただ、これを最小のスクリプトで再現しようとするとなかなか難しいです。
例えば次のコードを実行しようとすると、
私の環境(ASUS K55VD-SX3210Bに64bit版Win7を入れたもの)では
;ウィンドウを初期化 screen 0, 640, 480 ;IEコンポーネントを設置 pos 0, 0 axobj ie, "Shell.Explorer.2", 640, 480 ;ページを開く ie->"Navigate" "http://hsp.tv/" ;スクロール量を取得 pDoc = ie("Document") pBody = pDoc("body") pPW = pDoc("parentWindow") scrollH = pBody("scrollHeight") - ie("Height") pPW->"scrollBy" 0, scrollH delcom pDoc stop
と表示されます。が、
--------------------------- #Error 39 in line 10 (???) 外部オブジェクトの呼び出しに失敗しました ---------------------------
部分を
ie->"Navigate" "http://hsp.tv/" ;スクロール量を取得
と書き換えると、なぜか最後までスクロールするようになります。
ie->"Navigate" "http://hsp.tv/" wait 100 ;スクロール量を取得
ロジック的に正常なのにエラーが出されるとバグにしか見えないのですが、
これはHSP側のバグ? それともIEコンポーネントの仕様?
※wait命令を「forの空ループ」などの重い処理に書き換えても上記のエラーが出ます。
つまり、wait命令の間にIEの描画が行われていると思われます。
実際、「wait 50」程度じゃギリギリ描画しきれていましたが、「wait 10」ぐらいに
すると上記のエラーが出ます。要するに、安全に運用するためには、
onerrorで捕捉して誤魔化すか、「描画完了を待つ」命令なりAPIなりを模索するか
しないとダメだということです。