WebBrowserでリンクがローカルファイルを表示するには?

解決


ふろん  2008-10-28 20:33:30  No: 145368

WebBrowserを使用した簡単なエディターを作成しています。
次の処理が、うまくいかず躓いています。
何か、打開策ございましたらお知恵拝借お願いします。

サーバーにUPする前のシュミレーションですからリンク先の指定が
ローカルファイルの指定になってしまうのですが、表示ができません
何か基本的に間違っているのでしょうか?

リンク先指定(ローカルファイル)

<A href="http://bb15testlink">テストリンク</A>    ’  OK

<A href="C:\テストlinkA.html">リンク先TEST用</A>  ’  NG

そもそも、リンク先指定にはローカルファイルはNGなのでしょうか???


YuO  2008-10-28 21:06:58  No: 145369

fileスキームを使ってみてはどうでしょうか。

file:///C:/テストlinkA.html


ふろん  2008-10-28 21:52:41  No: 145370

Yuo  様

早速のご返事ありがとうございます
色々テストしているのですが
リンク先へアクセスできません。

<A href="file:C:\テストlinkA.html">リンク先TEST用</A>  NG

<A href=file":C:\テストlinkA.html">リンク先TEST用</A>  NG

指定の仕方が間違っているのでしょうか??


ふろん  2008-10-28 22:00:24  No: 145371

テスト追加

ちなみに、IBMホームページビルダーで同じコードで
テストしたところリンクアクセスOKでした。

<A href="file:C:\テストlinkA.html">リンク先TEST用</A>

WebBrowser上では、同じコードでアクセスNGです

まいりました


どま  2008-10-29 12:14:38  No: 145372

>サーバーにUPする前のシュミレーション

プレビュー画面上でのリンク動作の確認ということでしょうか。
一度、保存したものを読み込む形でプレビューしてみてください。

URLがabout:blank(新規作成して保存してない状態)だと
ローカルファイルへのリンクが作動しないようです。
(セキュリティ上の問題なんですかね?)


ふろん  2008-10-29 23:34:13  No: 145373

どま様

いつも、お世話になりありがとうございます。
ご返信遅れましてすみません。

その後色々テストしてみましたが、
インターネットエクスプローラで見ると正常にリンク先にアクセスしました。
<A href="file:C:\テストlinkA.html">リンク先TEST用</A>  OK

WebBrowser上ではやはりリンクをクリックしても何ら反応もしません。
リンク先のデータはもちろん、拡張子を.htmlとして保存し正常に
見れることを確認しております。
>プレビュー画面上でのリンク動作の確認ということでしょうか。
WebBrowser上でリンク確認ができれば、一番分かりやすいのですが
ご指摘のようにセキュリティ上の問題で制限かかかってるのであれば
やむを得ませんね。
でも、Yuo様のfileスキームでEpではリンク確認できますので取りあえずは
ボタン追加でリンク確認のみEpを開く処理で逃げました。
しかし何とかWebBrowser上でリンク確認ができればベターなので
しばらく未解決のままとしておきます。
何か解決策ございましたら、よろしくお願い申し上げます。

Yuoさま  こど様ありがとうございました。


どま  2008-10-30 04:18:07  No: 145374

すみません、うまく伝わってないような気がするので・・・

>一度、保存したものを読み込む形でプレビューしてみてください。

というのは、リンク元のHTMLのことです。
私は、

エディター用Webbrowserコントロールで製作したHTMLを一時ファイルに保存。
プレビュー用Webbrowserコントロールで、一時ファイルを読み込み、表示。

という形でやってリンク先のHTMLもプレビュー用のWebbrowserコントロール内に表示できたんですが。(環境依存なのかな?)

#おはずかしいことに、Epの意味がわかりません(^^;


ふろん  2008-10-30 22:20:23  No: 145375

んん??

こど様

>エディター用Webbrowserコントロールで製作したHTMLを一時ファイルに保存。
ここは、リンクファイル作成時にアドレス指定を埋め込むので当然一時ファイルに保存しています。

>プレビュー用Webbrowserコントロールで、一時ファイルを読み込み、表示。

???

リンクファイルの表示のステップは少しややこしい(私の作りかたがおかしいこともあります)ので整理しますと

1)リンクファイルのフォルダーは  c:\デスクTOP\リンクフォルダー\
    へ一括保存し管理しています。
2)リンク作成時は、この中にあるリンクファイルを参照しそのサブドメイン    名でc:\linkフォルダーに再保存しています。
3)でリンク先は、<A href="file:c:\link\test.html">リンク先TEST用</A>
   としています。
  こんな回りくどいやりかたをしているのは既にデスクTOPのサブファイルで
  仕組みを作ってしまいましたので、しかしここをfailスキームで呼び出しても日本文字のせいか表示ができなかったのでc:\linkに再保存しリンク先としています。従って同じファイルが2つ存在していますややこしくてすみません全くツギハギもいいとこです。

従って、リンクを作成した時点で、メインファイル・リンクファイル共に再保存される仕組みにしています。

>おはずかしいことに、Epの意味がわかりません(^^;
Ep=インターネットエクスプローラ  変な略語は誤解の元ですねすみません

>という形でやってリンク先のHTMLもプレビュー用のWebbrowserコントロール内に表示できたんですが。(環境依存なのかな?)

ということは、やはり私のやり方におかしいところがあるのでしようね
開発環境は  OS:Xp  2005.net です。

>プレビュー用Webbrowserコントロールで、一時ファイルを読み込み、表示。

この意味がもう一つ分かりません。

Webbrowserに表示されている、リンク先<A href="file:C:\テストlinkA.html">が反応しないので仕方なくエクスプローラー側で見ているのですが・・・・

>一時ファイルを読み込み

Webbrowserに表示されているクリックしても反応しない
リンク先である<A href="file:C:\テストlinkA.html">をどうやれば一時ファイルとして読む込むことができるのでしょうか?
もちろん、メインファイル(呼び出し側)も再保存してからの実行です。

>一度、保存したものを読み込む形でプレビューしてみてください。
>というのは、リンク元のHTMLのことです。  ???

ひょっとして、HTMLを解析して押されたURLを読み込む?
理解力悪くすみません。


どま  2008-10-31 06:29:11  No: 145376

すみません、自分の意図するところは、やっぱり伝わってないようです(^^;
リンク先・・・リンクされるHTMLファイルは、保存されているという前提で書いてます。

>リンク元のHTML

元ですから、<A href="file:c:\link\test.html">リンク先TEST用</A>と
書かれたHTMLのことです。リンクする側です。
ふろんさんの言われる、メインファイルということになるのでしょうか。

-----------------------------------------------------------------------------

Webbrowserコントロールが、エディター用とプレビュー用2つあると仮定します。
(1つでもデザインモードのON・OFFで可能でしょうが、私の経験上2つで書きます。)
エディター用Webbrowser1
プレビュー用Webbrowser2

リンクされるHTMLファイ(リンク先)ルは、c:\link\test.htmlであるとします。

(1)Webbrowser1で、<A href="〜>とリンクのあるファイルを作成します。
(2)Webbrowser1で作成しているHTMLファイル(リンク元)を一時ファイルとして保存します。
  魔界の仮面弁士さんのIPersistFile インターフェイスを利用する方法が参考になります。
  http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200506/05060052.txt
(3)WebBrowser2.Navigate("一時ファイルのパス")で、プレビューします。

---------------------------------------------------------------------------

これで、リンク動作の確認をするとリンク先のtest.htmlをWebBrowser2上に読み込めると思うのですが・・・。
<A>タグ内のパスの表現は、fileスキームでも、通常のC:\〜といったパスでも、日本語でも
ローカル内ならあまり関係ないと思います。

>c:\デスクTOP\リンクフォルダー\

このパスがデスクトップ上のフォルダであることを指しているなら、パスの表記間違いかと。
日本語版XPなら、デスクトップはC:\Documents and Settings\(ユーザー名)\デスクトップですね。

#こどって誰でしょうか(^^;;
#インターネットエクスプローラーはIEが通常の省略表記かと。


ふろん  2008-11-01 01:51:59  No: 145377

どま  様

重ね重ねのご指導痛み入ります。

ごどってどこであツ、関連情報を探しまくっていましたのでごっちゃになっていたようです。
誠に申し訳ございません。

Ep  →  IE  ホントもうメチャクチャですね!  お恥ずかしい次第です。

Webbrowserを2つ使うというアイデアは気が付きませんでした応用を考えて見ます。

>魔界の仮面弁士さんのIPersistFile インターフェイスを利用する方法が参考になります。

これは、未だテストしていませんが私の場合

RichTextBoxで原稿(HTML)を作り単純にebBrowserでみています
WebBrowser1.DocumentText = RichTextBox1.Text

>(3)WebBrowser2.Navigate("一時ファイルのパス")で、プレビューします。
未だに理解できないのは、このところなのですが
WebBrowser上でクリックした複数のリンク(実際には一時ファイルのパスが複数存在します)
の内どうやって特定のリンクへ飛ばすかなのですが・・・・
それとも  IPersistFile インターフェイスを使えば、それが可能なるということなのでしょうか、?

これから、IPersistFile インターフェイスのテストをして見ます。


どま  2008-11-01 06:03:08  No: 145378

>WebBrowser上でクリックした複数のリンク(実際には一時ファイルのパスが>複数存在します)
>の内どうやって特定のリンクへ飛ばすかなのですが・・・・

んー、一時ファイルは製作中(プレビューで最初に読み込みたいHTMLファイル)
のみで、あとはきちんと保存しているものだと思うんですが。

>RichTextBoxで原稿(HTML)を作り単純にWebBrowserでみています
>WebBrowser1.DocumentText = RichTextBox1.Text

たぶん、これがローカルファイルを表示できなかった原因になってる気がします。
WebBrowser1.DocumentTextに代入する形でHTMLを更新すると、WebBrowser1.Url(.ToString)が
about:blank(空)になってしまいます。
最初に書いたとおり、その状態ではローカルファイルへのリンクは作動
しないようになっているようです。
Navigateで読み込むようにすれば解決できるかなと思います。


ふろん  2008-11-04 22:39:58  No: 145379

どま  様

返信大変遅くなり申し訳ございません。

>WebBrowser1.DocumentTextに代入する形でHTMLを更新すると、>WebBrowser1.Url(.ToString)が
>about:blank(空)になってしまいます。

ここの編集表示の手順は次のようにしています。
1)リンク(ローカルファイルへの)を埋め込み一旦RichTextBox1へ書き出し
2)WebBrowser1.DocumentText = RichTextBox1.Text  で表示
3)再度、WebBrowser1の全HTMLをRichTextBox1.Text  へ転送
   これはデザインモードで直接WebBrowserを編集したとき同期を取る為
4)この状態で、WebBrowser1のリンクプロパティを確認してみると
    アドレスUrl=file:///C:/Link_Html/index.htmlでリンクは存在してい    るですがねぇ・・・

    (ここで見たプロパティの値とWebBrowser1.Url(.ToString)は異なって      いるということなのでしょうか。)

これを、仰せのとおりNavigate=IE  で見ると正常にリンクへ飛んでくれます。

で、やむをえないので取り合えずこれで逃げていると云うわけです。

大変長々とお付き合いして頂きありがとうございました。
まだ、課題はの残っていますが次に進みます。
今後ともよろしく、お願い申し上げます。


どま  2008-11-05 06:20:54  No: 145380

お役に立てず残念です。
解決する気がないのに、話をひっぱって、よけいなお世話でしたね・・・
やっぱり伝わっていない・・・。

>ここで見たプロパティの値とWebBrowser1.Url(.ToString)
>Navigate=IE

WebBrowser1.UrlもWebBrowser1.Navigateも、WebBrowserコントロールの
プロパティ、メソッドです。

フォームにButtonコントロール、TextBoxコントロール、WebBrowserコントロールを1つずつ貼り付けて、次のコードを試してみてください。

Public Class Form1

    '↓ここは、最初に表示させたい好きなファイル名(パス)で。
    Dim FILENAME As String = "file://C:\test.html
    
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        WebBrowser1.Navigate(FILENAME)
    End Sub

    Private Sub WebBrowser1_Navigated(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserNavigatedEventArgs) Handles WebBrowser1.Navigated
        TextBox1.Text = "現在表示中のファイル:" & WebBrowser1.Url.ToString
    End Sub

End Class


ふろん  2008-11-07 00:05:39  No: 145381

どま様

ご返事大変遅れており申し訳ございません。
処理の流れは、大筋先に書いた通りなのですが、
実際は、デザインモード併用の絡みでデータ保存やWebBrowserへの表示が非常に複雑になってしまい(デザインモードと通常モード切替のフラグ管理)
自分ながら、流れの理解に苦しんでいます。(言い訳ばかりですみません)

ご提示頂いたサンプルでは、確かにWebBrowser上でリンクへの移動が確認できました。(という事はその逆もでるはずですよね)
なのに、そこからまた元に戻ろうとするとうまくいかないのですがどうもこれは保存時のファイル管理にミスがあるようで、今デザインモードを廃止でプログラム修正中です。
取り合えず中間報告ですがご報告く致します。
>解決する気がないのに、話をひっぱって・・・・
そんなことはありません、何とかWebBrowser上で一貫した処理ができれば
それに勝る物はありません。
こちらこそ、自分の理解が悪く何度もご指導頂き恐縮しております。
しかし、プログラムの構造化というのがありますが、継ぎはぎ的なやりかたはいけませんね、反省しています。


ふろん  2008-11-07 22:10:49  No: 145382

どま様

やっとできました。!

原因は、やはりファイル管理にありました。
シュミレーションでのリンクはローカルファイル参照なのに、サーバーUP用に変換したファイルへ飛んでしまうロジックになっていました。
どま様  の
>現在表示中のファイル:" & WebBrowser1.Url.ToString
を参考に組み込み確認してみて初めてきずきました。
誠にお恥ずかしいかぎりです。
自分で造った物は正しいと言う先入観が問題を長引かせてしまったようです。
本当にお忙しい中、長々とお付き合い頂き申し訳ございませんでした。
編集作業(TEXT)・WebBrowser(デザインモードでの編集)・リンク編集確認
など全てを一つのWebBrowserで処理しようとしたところに無理があり(私の力では)非常のややこしいロジックになってしまい自分でも分からなくなっていました。
現在、どま様の
>エディター用Webbrowser1
>プレビュー用Webbrowser2
を参考に編集用とモニタ用に分け作り直しています。

再度、厚く御礼申し上げます。
ありがとうございます。


ふろん  2008-11-10 20:13:53  No: 145383

解決済みとします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加