WebBrowserコントロールのユーザーエージェントをiPhoneにして
Google(http://www.google.co.jp)へアクセスするとスクリプトエラー
が出て、正しく表示されません。これはWebBrowserコントロールの
仕様なのでしょうか・・?
なお、UserAgentは以下のコードで変更しています。
<DllImport("urlmon.dll", CharSet:=CharSet.Ansi)>
Private Shared Function UrlMkSetSessionOption(ByVal dwOption As Integer,_ ByVal str As String, ByVal nLength As Integer, ByVal dwReserved As Integer) As Integer
End Function
Private Sub btnTest_Click(以下略)
Dim ua As String = "Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0 like Mac OS X; ja-jp)"
Call UrlMkSetSessionOption(&H10000001, ua, ua.Length, 0)
End Sub
> WebBrowserコントロールのユーザーエージェントをiPhoneにして
> Google(http://www.google.co.jp)へアクセスするとスクリプトエラー
> が出て、正しく表示されません。
iPhone が採用しているブラウザエンジンは WebKit (Safari 系)ですが、
WebBrowser のそれは Trident (Internet Explorer 系)です。
そして、WebKit エンジンが解釈する JavaScript と、
Trident エンジンが解釈する JScript とは幾つかの差異があります。
たとえばイベントを追加するため、W3C DOM には window.addEventListener という
メソッドが追加されていますが、これは Safari では使えますが IE 系では使えません。
(代わりに attachEvent メソッドを使う事になっている)
こうした違いが、スクリプトエラーとなって表れているのでしょう。
> これはWebBrowserコントロールの
> 仕様なのでしょうか・・?
どちらかというと google 側の仕様です。
クロスブラウザ対応のサイトを作成することもできますが、通信量を抑えるため、
それぞれのブラウザに適合したスクリプトを送出しているのでしょう。
もしも iPhone エミュレーターの作成が目的なのであれば、WebBrowser の
代わりに、WebKitBrowser を採用する手もあるかもしれません。(未確認)
http://sourceforge.net/projects/webkitdotnet/
http://blog.sharplab.net/computer/cprograming/3247/
ご回答ありがとうございます。
とても解りやすく、勉強になりました。
他の質問に対するご回答も拝見しましたが
魔界の仮面弁士様は本当に博学ですね。
Wkit.NETを使用してみました。
スクリプトエラーも出なくなり、次のステップへ進むことができそうです。
なお、デバッグしようとすると、以下のエラーメッセージが出ました。
"Failed to initialize activation context"
Debugフォルダに、Webkit.NETに含まれているdllを放り込んでみたら
エラーがでなくなり、デバッグ可能になりました。
(適切な処置ではないかもしれませんが)
同じ症状で悩んでいる方向けのメモでしたっ