我在 Windows 窗体 WebBrowser 控件中呈现以下简单的 HTML:
<HTML>
<HEAD></HEAD>
<BODY bottommargin='0' leftmargin='10' rightmargin='0' topmargin='10'>
<span>Programs</span><br /><br />
<a href='file:///C:\Temp\prog1.cnc'>Program 1</a><br />
<a href='file:///C:\Temp\prog2.cnc'>Program 2</a><br />
<a href='file:///C:\Temp\prog3.cnc'>Program 3</a><br />
</BODY>
</HTML>
问题是链接没有导航到 href 属性中标识的文件。
我可以确认AllowNavigation
控件上的属性设置为True
.
此外,Navigating
当我单击链接时,该事件不会触发。
如果我更改路径以引用远程共享上的文件,一切都会按预期工作,例如:
<a href='file://\\servername\Temp\prog1.cnc'>Program 1</a>
或不带file
前缀:
<a href='\\servername\Temp\prog1.cnc'>Program 1</a>
两者都触发了该Navigating
事件。
引用本地文件时我错过了什么?
我尝试将文件路径更改为公用文件夹以排除权限问题。同一个应用程序也在写入文件,因此似乎不太可能出现权限问题。
这些文件是简单的文本文件,当单击链接时,我试图在浏览器控件中显示它们。
设置DocumentText
浏览器控件属性的代码:
Private Shared Function LoadProgramHtml(ByVal programFiles() As String) As String
Dim programHtml As New StringBuilder
If ProgramFiles.Length > 0 Then
programHtml.AppendLine("<HTML>")
programHtml.AppendLine("<HEAD></HEAD>")
programHtml.AppendLine("<BODY bottommargin='0' leftmargin='10' rightmargin='0' topmargin='10'>")
programHtml.AppendLine("<span>Programs</span><br /><br />")
For Each program As String In ProgramFiles
Dim progInfo As New FileInfo(program)
programHtml.AppendLine(String.Format("<a href='file://{0}'>{1}</a><br />", progInfo.FullName, progInfo.Name.ToUpper))
Next
programHtml.AppendLine("</BODY>")
programHtml.AppendLine("</HTML>")
End If
WebViewer.DocumentText = programHtml.ToString()
End Function
处理导航事件的代码:
Private Sub WebViewer_Navigating(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserNavigatingEventArgs) Handles WebViewer.Navigating
Dim filepath As String = e.Url.OriginalString
If File.Exists(filepath) Then
Dim progInfo As New FileInfo(filepath)
If progInfo.Extension.ToLower = ".cnc" Then
WebViewer.ScrollBarsEnabled = True
WebViewer.DocumentText = File.ReadAllText(e.Url.OriginalString).Replace(Chr(13), "<br />")
End If
e.Cancel = True
End If
End Sub