DOBON.NET DOBON.NETプログラミング掲示板過去ログ

スクリプトエラーの原因と対策

環境/言語:[VB2008+Vista]
分類:[.NET]

お世話になります。
VB2008+Vistaで開発中です。

スクリプトエラーが発生し、原因と対策が分からず、投稿しました。

Private Sub Form1_Load(ByVal sender As System.Object,・・・
wb1.Navigate("https://delicious.com/register")
End Sub

上記コードでWebBrowserを開こうとすると、
「識別子、文字列または数がありません」
というスクリプトエラーが発生します。

しかし、IE9やFireFox3.6で、直接URLを打った場合は、
スクリプトエラーが発生しません。

WebBrowserとIEで開く場合では、何か違いがあるのでしょうか?

原因と対策について、お分かりの方がいらっしゃいましたら、
ご教示頂けませんか?

よろしくお願い致します。
2011/12/23(Fri) 06:53:12 編集(投稿者)

■No29513に返信(chikaさんの記事)
スクリプトエラーは添付した画像と同じものですか?
main.jsの380行目は以下です。
},});return false;},loadSearchResults:function(keyword,al)
3文字目ですので,}の解釈でエラーになっているのでないかと思い
ます。

FirefoxやIE9で表示したときにエラーが発生しないのはJavaScript
の解釈の仕方が違うのだろうと思います。

以下のコードを追加してWebbrowserコントロールで当該ページを表
示したときのdocumentModeを確認したところ、7と出力されました。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles Button1.Click
    WebBrowser1.Navigate("javascript:alert(window.document.documentMode);")
End Sub

IE9で当該ページを表示してjavascript:alert(window.document.
documentMode);のブックマークレットでdocumentModeを確認したと
ころ、8と表示されました。WebBrowserコントロールとIE9ではdocu
mentModeが違います。

WebBrowserコントロールやIE9のレンダリングエンジンであるTride
ntはdocumentModeによってJavaScriptの解釈を変えるのではないか
と思います。原因はJavaScriptで,}と記述されていること。そして
documentModeが7であることの2つだと思います。

対策は思いついたところでは、エラーを抑止するやり方とdocument
Modeを変えるやり方です。HtmlWindow.Errorイベントのハンドラで
HtmlElementErrorEventArgs.HandledプロパティにTrueをセットす
ることでエラーを抑止することができます。documentModeを変える
やり方についてはレジストリにアプリケーションを登録することで
可能のようですが、動的に変える方法はわかりません。

レジストリのキー名は以下です。
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION

値の名前は実行するファイル名です。値のデータはリンク先を参照
ください。

Internet Feature Controls (B..C)
http://msdn.microsoft.com/en-us/library/ee330730(VS.85).aspx#browser_emulation
添付ファイル: error.png (5 KB)
■No29516に返信(もりおさんの記事)
> 2011/12/23(Fri) 06:53:12 編集(投稿者)

ご返信ありがとうございます。

> スクリプトエラーは添付した画像と同じものですか?
はい、同じです。

ドキュメントモードについては、全く知識がなかったので、
すごくヒントになります。

これから、調査・検証をしていきたいと思いますが、
時間がかかりそうなので、取り急ぎ、お礼させて頂きます。

ただ、エラーを抑止するだけでは、画面上のボタンが使えないようなので、
documentModeを変える方向で考えていきたいと思います。

改めて、報告・質問させて頂きたいと思いますので、
よろしくお願いいたします。
■No29516に返信(もりおさんの記事)

教えて頂いたレジストリの設定で、うまく動作することは確認できました。
ありがとうございます。

しかし、これ以外の方法を探してみましたが、見つかりませんでした。

クライアントから、レジストリをいじるのはNGとのことで、
残念ながら考えていた機能を削除する結論に至りました。

ただ、個人的には勉強になったので、感謝しております。
これで、解決済みとさせて頂きます。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板