人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

VB.net2008上からWebBrowserコンポーネントを使って、VBとOpenStreetMapを連動する仕組みを作成する際に質問があります。

OpenStreetMapの地図をロードすると、そこには著作権表示とOpenStreetMapへのリンクが貼ってあります。
しかしVB内でWebブラウジングできると話がややこしくなるので、WebBrowserコンポーネント内はOpenStreetMapの表示のみ行いたいと考えています。

そこで、以下のどちらかの対処法についてご存じの方教えてください。

A.著作権表示をクリックすると新しくユーザが普段使っているブラウザ、もしくはIEが起動してOpenStreetMapのページを表示するようにする。
B.OpenStreetMapの地図には著作権表示を行うが、OpenStreetMapへのリンクは外して表示させる。

よろしくお願いいたします。

※なお、表示されているOpenStreetMapの著作権表示の上あたりに透明な何かを置いてクリックできないようにするという手は、最後の手段でとっておいているのでご遠慮ください。
※WindowsXPのSP2以降で使える手段でお願いします。

●質問者: くじぇ
●カテゴリ:コンピュータ インターネット
✍キーワード:IE OpenStreetMap VB VB.NET Web
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● HALSPECIAL
●35ポイント

以前にも回答したかと思うのですが、WebBrowserからDOMを操作することで対応できると思います。

DOM自体は、WebBrowser+VB でも JavaScriptでも変わらないと思いますので、

まず、OpenStreetMapのページをhtmlファイルとして、静的なファイルに保存し、

JavaScriptでリンクを無効にする等の操作を記述してみます。

それをVBに転記するように作業を進めてはいかがでしょうか?


著作権表示の部分だけでも、HTMLのタグを公開していただければ、私、もしくは他の回答者がコードとして回答しやすくなるのではないかと思います。

◎質問者からの返答

HALSPECIALさんありがとうございます。

OpenStreetMapから届いてくる時点で著作権表示へのリンクが埋め込まれているので、どうやって操作したら良いのかわからず投稿させていただきました。

そのOpenStreetMapをダウンロードしてくれる静的HTMLのソースについてですが、Easymapから「Create Map」タブをクリックし、一番下の「Download Map」ボタンをクリックすることでダウンロードできます。

http://osmtools.de/easymap/

このHTMLに加えて、右側にリンクされている「util.js」「map.css」を一緒にダウンロードしてきて同じフォルダに置くことで

利用することができます。

私の場合は、この3つのファイルをリソースに組み込んで、表示するときにはその都度書き出して対処しています。

よろしくお願いいたします。


2 ● HALSPECIAL
●35ポイント ベストアンサー

簡単にやるには、こんな感じでいかがでしょう。

 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

  'JSON形式のデータがこうで、
  ' {name:"OpenStreetMap",attribution:"Data CC-By-SA by <a href='http://openstreetmap.org/'>OpenStreetMap</a>"
  '実際はこのようなタグで表示されています。
  ' <div unselectable="on" class="olControlAttribution olControlNoSelect" style="position: absolute; z-index: 1002;" id="OpenLayers.Control.Attribution_3">Data CC-By-SA by <a href="http://openstreetmap.org/">OpenStreetMap</a></div>
 Dim doc As HtmlDocument = WebBrowser1.Document
 Dim div As HtmlElement = doc.GetElementById("OpenLayers.Control.Attribution_3")
  'なので簡単な対応としては、このdivタグの中身を書き換えればOKです。
 div.InnerHtml = "Data CC-By-SA by OpenStreetMap"

 End Sub

なお、WebBrowser1_DocumentCompleted で実装するには、htmlがロードされ、JavaScriptの処理等がすべて済んだのを確認してから、上記のようにする必要があります。(工夫が必要?)

◎質問者からの返答

HALSPECIALさんありがとうございます。

ただページ遷移はボタンをクリックする時に発生するのではなく、OpenStreetMapに表示されるリンクをクリックすることで

発生するものなので、自分の中で引っかかっていました。

結局自分がとった方法は

1.ページ移動が発生するとWebBrowser.Navigatedイベントが発生することがわかったので、イベント処理関数を追加しました

2.イベント処理関数内では、OpenStreatMapへ誘導するブラウザの起動させ、WebBrowserを初期化するようにした

3.WebBrowser.Navigatedはページ遷移の際に2回発生するので、1度だけしか実行しないように一時的なロックをかける

という方法で解決しました。

HALSPECIALさん何度もアドバイスを提供して頂いてありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ