OpenStreetMapの地図をロードすると、そこには著作権表示とOpenStreetMapへのリンクが貼ってあります。
しかしVB内でWebブラウジングできると話がややこしくなるので、WebBrowserコンポーネント内はOpenStreetMapの表示のみ行いたいと考えています。
そこで、以下のどちらかの対処法についてご存じの方教えてください。
A.著作権表示をクリックすると新しくユーザが普段使っているブラウザ、もしくはIEが起動してOpenStreetMapのページを表示するようにする。
B.OpenStreetMapの地図には著作権表示を行うが、OpenStreetMapへのリンクは外して表示させる。
よろしくお願いいたします。
※なお、表示されているOpenStreetMapの著作権表示の上あたりに透明な何かを置いてクリックできないようにするという手は、最後の手段でとっておいているのでご遠慮ください。
※WindowsXPのSP2以降で使える手段でお願いします。
簡単にやるには、こんな感じでいかがでしょう。
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の処理等がすべて済んだのを確認してから、上記のようにする必要があります。(工夫が必要?)
以前にも回答したかと思うのですが、WebBrowserからDOMを操作することで対応できると思います。
DOM自体は、WebBrowser+VB でも JavaScriptでも変わらないと思いますので、
まず、OpenStreetMapのページをhtmlファイルとして、静的なファイルに保存し、
JavaScriptでリンクを無効にする等の操作を記述してみます。
それをVBに転記するように作業を進めてはいかがでしょうか?
著作権表示の部分だけでも、HTMLのタグを公開していただければ、私、もしくは他の回答者がコードとして回答しやすくなるのではないかと思います。
HALSPECIALさんありがとうございます。
OpenStreetMapから届いてくる時点で著作権表示へのリンクが埋め込まれているので、どうやって操作したら良いのかわからず投稿させていただきました。
そのOpenStreetMapをダウンロードしてくれる静的HTMLのソースについてですが、Easymapから「Create Map」タブをクリックし、一番下の「Download Map」ボタンをクリックすることでダウンロードできます。
このHTMLに加えて、右側にリンクされている「util.js」「map.css」を一緒にダウンロードしてきて同じフォルダに置くことで
利用することができます。
私の場合は、この3つのファイルをリソースに組み込んで、表示するときにはその都度書き出して対処しています。
よろしくお願いいたします。
簡単にやるには、こんな感じでいかがでしょう。
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さん何度もアドバイスを提供して頂いてありがとうございました。
HALSPECIALさんありがとうございます。
ただページ遷移はボタンをクリックする時に発生するのではなく、OpenStreetMapに表示されるリンクをクリックすることで
発生するものなので、自分の中で引っかかっていました。
結局自分がとった方法は
1.ページ移動が発生するとWebBrowser.Navigatedイベントが発生することがわかったので、イベント処理関数を追加しました
2.イベント処理関数内では、OpenStreatMapへ誘導するブラウザの起動させ、WebBrowserを初期化するようにした
3.WebBrowser.Navigatedはページ遷移の際に2回発生するので、1度だけしか実行しないように一時的なロックをかける
という方法で解決しました。
HALSPECIALさん何度もアドバイスを提供して頂いてありがとうございました。