質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

WSH

WSH(Windows Script Host)とは、Windows上でテキストファイルに記述したJavaScriptやVBScriptなどのスクリプトを実行するホスト環境のことです。COMを通じたレジストリ操作やWMIへのアクセスが可能で、複雑な処理も行うことができます。

Q&A

解決済

2回答

5397閲覧

WSH/JavaScriptでHTML要素へアクセスできない

msx2

総合スコア174

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

WSH

WSH(Windows Script Host)とは、Windows上でテキストファイルに記述したJavaScriptやVBScriptなどのスクリプトを実行するホスト環境のことです。COMを通じたレジストリ操作やWMIへのアクセスが可能で、複雑な処理も行うことができます。

0グッド

0クリップ

投稿2016/02/23 19:55

JavaScriptを使ってIEオブジェクトをコントロールしてform以下の要素にアクセスしようとしています。

JavaScript

1var ie = new ActiveXObject("InternetExplorer.Application"); 2ie.visible = true; 3ie.navigate("http://目的のページ"); 4waitIE (ie); 5 6for(var j=0; j < ie.document.getElementsByTagName("form").length; j++) { 7 WScript.Echo( ie.document.getElementsByTagName("input")[j].innerHTML ); 8}

目的のページにはformタグが5つあり、このスクリプトを実行すると5回ループします。不思議なのは1回目のWScript.EchoではinnerHTMLが表示されますが2回目移行は何も表示されません。(空のポップアップが表示)
もちろん2つ目移行のformの中にはinput要素などが含まれています。

このソースにあるウェイト以外にもテストで十分な長さのウェイトを入れて試しているので読み込みが完了していないことはありません。
2つ目移行のform要素をgetElementsByNameで取得しても結果は同じです。

一体どうしてこのようなことが起こるのでしょうか?

環境はWindows7でie11です。
ソースはテキストファイル(hoge.js)に保存してから実行しています。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

今回の問題はHTML側にあったみたいです。
IEオブジェクトがダメな子だと思いこんでいましたがそうではありませんでした。

対象のHTMLは非公開なのでこちらに掲載することはできませんが、formタグがtableの中にあり、inputやselect、</form><tr>で区切っているためにformが正しく取得できなかったものと考えられます。(F12のDOM Explorerで見ても階層がありません)一応FormElementオブジェクトとして取得できるのが混乱の元でした。

formをgetElementsByNameで取得してからその中のinputやselectを操作したかったのですが、今回はinput要素やselect要素自体は取得できるので、インデックス番号決め打ちで解決できそうです。

投稿2016/02/24 01:58

msx2

総合スコア174

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

innerHTMLではなくて、valueで取得してみたらどうなりますか。

手元の環境で試してみたらうまくいきました。

Javascript

1var ie = new ActiveXObject("InternetExplorer.Application"); 2ie.visible = true; 3ie.navigate("http://local.thom.jp/sample.html"); 4while (ie.ReadyState < 4 || ie.Busy) { 5} 6 7for(var j=0; j < ie.document.getElementsByTagName("form").length; j++) { 8 WScript.Echo( ie.document.getElementsByTagName("input")[j].value ); 9}

html

1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <title></title> 6</head> 7<body> 8 <form action="GET"> 9 <input type="textbox" value="testA"> 10 </input> 11 </form> 12 <form action="GET"> 13 <input type="textbox" value="testB"> 14 </input> 15 </form> 16 <form action="GET"> 17 <input type="textbox" value="testC"> 18 </input> 19 </form> 20 <form action="GET"> 21 <input type="textbox" value="testD"> 22 </input> 23 </form> 24 <form action="GET"> 25 <input type="textbox" value="testE"> 26 </input> 27 </form> 28</body> 29</html>

投稿2016/02/23 21:41

thom.jp

総合スコア686

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

msx2

2016/02/24 01:40

inputは取得できました! innerHTMLが取れない時点でieのオブジェクトが通常のJavaScriptの動きとは異なる(DOMを正しく解釈してくれない的な)ものと早合点し諦めていました。 知識不足でよくわかっておらず、今回もformオブジェクトが取得できない=inputも取れないと思っていましたが、inputが単独で取得できるならやりたいことを実現する方法はありそうです。 問題の原因を見つけるきっかけにもなりました!ありがとうございます。 質問に追記しておきますのでご覧いただければ幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問