2011-06-18 184 views
0

我目前正在嘗試使用.NET WebBrowser來顯示我正在編寫的應用程序的幫助信息(本地存儲在html文件中),但是我遇到了兩個問題,都與超鏈接有關。VB.NET HTML超鏈接

首先,我有一個搜索功能,它以file:\\\C:\...的格式返回正確的URL,我可以將其複製並粘貼到瀏覽器中,然後它將在那裏導航。然而,點擊控件本身的鏈接本身並沒有任何作用。

其次,HTML文件都包含其他HTML文件的相對路徑。這些當然不起作用,因爲我剛剛結束了file:\\\C:\help.html這給了我一個'網頁不可用'。但我想不到解決HTML文件並將路徑鏈接到鏈接前面的目錄的方法。

編輯:只是爲了澄清,在第一個問題我動態構建搜索結果頁面,用戶鍵入。 HTML中包含類似這樣的幾個結果(是的,它是未完成的,我只是顯示你的鏈接部分):

<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,並用Chrome,IE和Firefox打開它可以正常工作。

在第二個問題中,我爲不同部分提供了不同的幫助文件,每個部分都包含相對於其他幾個部分的鏈接。 VB將它們選爲直接路徑,並嘗試從根目錄開始,即file:\\ 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,那麼我認爲它鏈接了一個相對於它認爲是根的可能是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