はてなアンテナビューワ Ver1.04

以下の改良を行いました。

  • 起動した時に表示するhtmlが、はてなアンテナビューワのアンテナ表示部分ではなくて、新たにWebブラウザが開いて、そこに表示されてしまう不具合の修正。
  • はてなユーザー入力欄に入力した後にアクションボタンを押してアンテナを取得しようとした際に、上部の更新日時表示が更新されなかった不具合の修正。

WindowsMobile6 Smartphone Edition版にも同改良を施してあります。
ダウンロード&使い方ページは、こちら


以下、こちらのエントリーで書かせていただいた不具合の原因とその解決策に関する技術的なご説明です。

今回の不具合について

最初にid:cooldadさんのご報告で今回の不具合が発覚しました。
最初は、こちらのエントリーで検証したように.Net Compact Framework2.0やファームウェアのバージョンの違いによるものなのではと推測を立てたのですが、ご報告いただいた内容を比べてみて、これらのバージョンによるものが原因ではなさそうと感じました。
そんな中で、id:lark-andanteさんがコメントで原因について書いて下さいました。
以下、コメントを引用させていただきましたm(__)m

少し気になったのでインストールしてみました。
結果からいいますと私の環境でもブラウザが起動してしまいました。


仕事合間に確認したので、しっかりとは検証してないのですが・・・。
とりあえずの回避方法は分かりましたのでご報告を。
どうやら、OperaNetFrontを規定のブラウザに設定していると発生するようです。
両ブラウザでこの設定を無効にすれば正常に動作しました。


WebBrowserクラスがIEコンポーネントを利用するので、規定のブラウザがIE以外だとこの現象がでるのかも?

不具合を再現

そこで私もOperaを起動して「メニュー」→「ツール」→「設定」→「その他」タブを確認してみたところ、「Operaを標準ブラウザに設定」のチェックが外れていました。


そこで試しにのこのチェックを入れた上で、はてなアンテナビューワVer1.03を起動してみたところ、cooldadさんからご報告いただいたのと同じ症状が再現されました!



NetFrontLunascape Mobileでも同様に設定後試してみたところ、やはり標準のブラウザに設定しているブラウザがはてなアンテナビューワの起動と同時に起動してしまいました。

解決策の詮索

lark-andanteさんからご報告いただくまではこの不具合についてネットでどうやって調べてばいいか分からなくて悩んでいたのですが、lark-andanteさんのお陰で不具合の再現方法は特定できましたので、Googleで「WebBrowserコントロール Opera」と検索してみたところ、以下のMSDNフォーラムの投稿ページがヒットしました。


Opera Mobileがデフォルトブラウザの場合に発生する不具合


ここで投稿なさっているDaisuke Iwataさんの投稿内容がまさに私が解決したい内容そのものでしたので、内容を最後まで読んでみたところ、以下の方法で解決できることが分かりました。

  • WebBrowserコントロールのDocumentTextプロパティにstringとしてhtmlの内容を流し込む
  • 又は、Navigateメソッドで読み込むhtmlファイルの拡張子をhtml以外のものに変更する

後者の方が楽そうですが、例えば完全にオリジナルの拡張子に変えたとして、将来その拡張子が偶然何かの言語で使われたり、別のアプリで関連付けされてしまう可能性が無いとは言い切れないので、前者の方法で改良を行うことにしました。

具体的な改良点

はてなアンテナビューワのソースは全て公開させていただいています。
それを元にlark-andanteさんが改良を加えたところ、不具合を解消できたというご報告もいただきました。
それが今からご紹介するものと同じだと嬉しいのですが^^;、もし、もっと良い方法がありましたら、ご教示いただけると嬉しいですm(__)m


Ver1.03でのアンテナページ表示方法

System.Net.WebRequest、System.Net.WebResponseを使ってアンテナ取得整形プログラムにアクセスして取得したアンテナhtmlをSystem.IO.StreamWriterでLastAntenna.htmlへ保存した後に、
そのhtmlファイルのパスをWebBrowser.NavigateのUriに指定することで表示

Ver1.04でのアンテナページ表示方法

LastAntenna.htmlへ保存するまでの工程は同じで、保存後にSystem.IO.StreamReaderでLastAntenna.htmlをオープンして、ReadToEnd()で一気に最初から最後までのhtmlソース内容を読み込み、String型の変数へ保存した後に、
WebBrowser.DocumentTextにその変数を指定することで表示

こうすることによって、Operaなどのブラウザの設定で標準のブラウザにする設定がなされていても、そのブラウザが起動することなく、ちゃんとはてなアンテナビューワにアンテナページが表示されるようになりました☆


おそらく、WebBrowser.Navigateメソッドにローカルのhtmlファイルを指定した場合には、標準のブラウザ設定になっているブラウザが起動するという仕様なんでしょうね。。何故そんな仕様‥
でも、解決できてよかったです♪


lark-andanteさん、原因についてご報告いただきありがとうございました(礼

広告を非表示にする