VB.NET HTML超链接

时间:2011-06-18 11:03:30

标签: .net html vb.net

我目前正在尝试使用.NET WebBrowser来显示我正在编写的应用程序的帮助信息(存储在本地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将它们作为直接路径选择,并尝试从根目录转到那里,即文件:\\ C:\ file.html。我能想到的唯一解决方案是解析文件并使用WebBrowser.Navigate(Path.Combine(pathToDirectory, nameOfHelpFile.html),这看起来效率要低得多。

由于

2 个答案:

答案 0 :(得分:0)

我认为您需要向我们展示一些代码,以确切了解您的问题所在。我编写了一个快速示例,将WebBrowser控件与一个HTML文件一起使用,该文件链接到另一个,并且其工作正常。

相对链接相对于正在浏览的当前文档。如果您正在将原始HTML写入浏览器,那么我认为链接相对于它认为是root的内容可能是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

答案 1 :(得分: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