2011-06-18 3 views
0

現在、.NET WebBrowserを使用して、私が書いているアプリケーションのヘルプ情報(HTMLファイルにローカルに保存されている)を表示しようとしていますが、ハイパーリンクに関連する2つの問題があります。VB.NET HTMLハイパーリンク

まず、正しいURLを書式で返す検索機能がありますfile:\\\C:\...ブラウザにコピーして貼り付けることができます。コントロール内のリンクをクリックしても何もしません。

第2に、HTMLファイルにはすべて、他のHTMLファイルへの相対パスが含まれています。これらは私がウェブページが利用できないようにするfile:\\\C:\help.htmlで終わるので、もちろんこれらはうまくいきません。しかし、私は、HTMLファイルを解析せずに、リンク先のディレクトリへのパスを連結することなく動作させる方法を考えることはできません。

編集:最初の問題では、ユーザータイプとして検索結果ページを動的に作成しています。たまたま、それはdoesnの今

<a style='font-family:verdana;color:#0645AD;font-size:20px;text-decoration:underline' href='C:\Users\User\Documents\project\bin\Debug\..\..\Help\FAQ.html'>FAQ</a><br />...This is the <b>FA</b>Q File.

、私は対照何でそのリンクをクリックしたとき:HTMLは(私はあなたのリンク部分を示すよ、はい、それは未完成です)これと同様のいくつかの結果が含まれています私に「ウェブページが利用できない」とか、実際のページに私を連れて行かないでください。ただし、HTMLを保存してChrome、IE、Firefoxで開くとうまく動作します。

2番目の問題では、それぞれにいくつかの他のファイルへの相対的なリンクを含む異なるセクションのヘルプファイルがあります。 VBはこれらを直接パスとして選択し、ルート(つまり、ファイル:\\ C:\ file.html)から移動しようとします。私が考えることができる唯一の解決策は、ファイルを解析してWebBrowser.Navigate(Path.Combine(pathToDirectory, nameOfHelpFile.html)を使用することです。これははるかに非効率的であるようです。

おかげで

答えて

0

修正プログラムは、WebBrowserコントロールの「ナビゲート」イベントにコードのビットを追加すること関与しました。

Private Sub HelpBrowser_Navigating(sender As System.Object, e As System.Windows.Forms.WebBrowserNavigatingEventArgs) Handles HelpBrowser.Navigating 
    If e.Url.Scheme = "about" And e.Url.AbsolutePath <> "blank" Then 
     ' The clicked URL is of the format about:<file>. 
     HelpBrowser.Navigate(HelpRootPath + "\" + e.Url.AbsolutePath) 
    End If 
End Sub 
0

私はあなたがあなたの問題があり、正確にものを見るために私たちにいくつかのコードを表示する必要があるとしていると思います。 WebBrowserコントロールを使用して、他のHTMLファイルにリンクしているHTMLファイルと、期待どおりに動作するという簡単な例を作成しました。

相対リンクは、現在閲覧中のドキュメントを基準にしています。生のHTMLをブラウザに書いているのであれば、リンクは自分が考えているものとの相対的なリンクはfile:///c:/かもしれないが、わからないと思う。また、ファイルがドライブのルートに実際に存在している場合は、アクセス権の問題が発生している可能性があります。

は、ここで私のために正常に動作していますサンプルです:

Option Strict On 
Option Explicit On 

Imports System.IO 

Public Class Form1 

    Private WithEvents WebB As WebBrowser 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
     ''//Create our web browser 
     Me.WebB = New WebBrowser() 
     ''//Set it to fill the form 
     Me.WebB.Dock = DockStyle.Fill 
     ''//Add it to the form 
     Me.Controls.Add(Me.WebB) 

     ''//We will put our HTML files in this folder which is on the desktop 
     Dim WorkingFolder = Path.Combine(My.Computer.FileSystem.SpecialDirectories.Desktop, "HTMLTest") 
     ''//Create it if it doesn't exist 
     If Not Directory.Exists(WorkingFolder) Then Directory.CreateDirectory(WorkingFolder) 

     ''//The names of the two files that we are creating 
     Dim FirstFile = "Start.html" 
     Dim SecondFile = "End.html" 

     ''//Write HTML in the first file that has a link to the second file 
     My.Computer.FileSystem.WriteAllText(Path.Combine(WorkingFolder, FirstFile), <html><head><title>Start</title></head><body><a href=<%= SecondFile %>>Link to second file</a></body></html>.ToString(), False) 
     ''//Write HTML in the second file 
     My.Computer.FileSystem.WriteAllText(Path.Combine(WorkingFolder, SecondFile), <html><head><title>End</title></head><body>This is the second file</body></html>.ToString(), False) 

     ''//Tell the web browser to navigate to the second file 
     Me.WebB.Navigate(Path.Combine(WorkingFolder, FirstFile)) 
    End Sub 
End Class