• 締切済み

なぜmatchメソッドがエラーになる?

こんばんは。 下記スクリプトですが、「★★★」の個所で「オブジェクトでサポートされていないプロパティまたはメソッドです。」となってしまいます。なぜでしょうか?また、回避するにはどうしたらいいでしょうか? やりたいことは、"rd"を含むURLだけリストしないのです。 -- var IE = WScript.CreateObject("InternetExplorer.Application"); var URL = "http://www.yahoo.co.jp"; IE.Navigate(URL); WaitLoad(); var fs = WScript.CreateObject("Scripting.FileSystemObject"); var stream = fs.CreateTextFile("yahoo.txt"); var objTagsAs = IE.Document.all.tags("A"); for (i = 0; i < objTagsAs.length; i++) if (objTagsAs[i].match(/rd/i) != -1) //★★★ stream.Write(objTagsAs[i] + "," + objTagsAs[i].innerText + "\r\n"); stream.Close(); function WaitLoad() { var stat, dstart; stat = 0; while(true) if(stat == 0) { if(!IE.Busy) if(IE.Document.readyState == "complete") { dstart = (new Date()).getTime(); stat = 1; } } else { if(!IE.Busy && IE.Document.readyState == "complete") { if((new Date()).getTime() >= dstart + 3000) break; } else stat = 0; } }

みんなの回答

  • godakaz
  • ベストアンサー率72% (16/22)
回答No.1

matchということは、対象が文字列でないと使えないかと。 objTagsAs[i].だけでは、それはi番目のAタグオブジェクト自身を指しているだけで、文字列では無いから、という理由のエラーかと思われますが?違うかな? それであれば、Aタグの前後を特定のタグで括るなりして、その内容をinnerHTMLで取得して、その文字列を対象にすればmatchが使えるかも。(アイディアだけですが。。。)

noname#27709
質問者

お礼

ありがとうございます。 型変換 if (String(objTagsAs[i]).match(/rd/i) != -1) //★★★ または if ((objTagsAs[i]+"").match(/rd/i) != -1) //★★★ とすることで解決できました。 次の行の stream.Write(objTagsAs[i] + "," + objTagsAs[i].innerText + "\r\n"); で出力できていたので、String型だと思っていたのですが、 「","」の部分で型変換されていたようですね。 ありがとうございました。

関連するQ&A

専門家に質問してみよう