comのHTMLFileでgetElementsByClassNameを使って要素を取得しようとしたんだが、うまくいかなかった。
調べてみると、MSXML2.XMLHTTPで取得したhtmlソースをテキストに出力してみると、コピペしようとしても出来ない文字がいることに気づいた。
何故か、null文字がソースに含まれていたらしい。
下記のようにNULL文字を削除してから読み込むようにしたら問題なく動くようになった。
//NULL文字を削除 var re=new ActiveXObject("VBScript.RegExp") re.pattern = "\\0" //NULL文字を検索 re.Global = true; //文字列全体を検索。trueでする(規定)、falseでしない(マッチしたらそこで終了)。 re.IgnoreCase = true; //大文字・小文字を区別。trueでしない(規定)、falseでする。 strHtml=re.Replace(strHtml,"")
少し話は変わるが、getElementsByClassNameは、取得したHTMLソースに<meta http-equiv=”X-UA-Compatible” content=”IE=edge”>のような感じの指定されていないとIE11として動作しないので注意。
何も指定されてないと、ソースの状態によってIE7として動いてたりする。例えばIE7だと、IHTMLDocument5までの要素しか使えないので、getElementsByClassNameが使えない。IHTMLDocument8のような最新のものまで使いたい場合、ソースのheadに<meta http-equiv=”X-UA-Compatible” content=”IE=edge”>を追加する必要がある。
例えば、下記のような感じでやると、ソースのheadが書き換えられるので、最新の関数まで使えるようになる。
//IE11形式で処理するようにheadタグを書き換え。 var re=new ActiveXObject("VBScript.RegExp") re.pattern = "<head[\\s\\S]*</head>" re.Global = false; re.IgnoreCase = true; strHtml=re.Replace(strHtml,'<head><meta http-equiv="X-UA-Compatible" content="IE=edge"></head>')
コメント