单击浏览器 html 页面中的 link 时显示 VB6 表单
Show VB6 forms when click a link in html page of webbrowser
我正在使用 VB6 WebBrowser,这里我需要在用户单击 WebBrowser
的 link 的任何特定 link 时打开一个 vb6 表单,例如
在HTML
<html>
<head>
<body>
<a href="--show vb6 form--">Click To show VB6 Form2</a>
</body>
</html>
我不知道该怎么做。我想有时它可以完成第三个文本文件,例如单击 link 时会在文本文件中写入 002
之类的鳕鱼。
而在 vb 表格中,计时器将每秒检查一次文件,当计时器检测到文件包含 002
时,它将显示表格。
这个方法可以吗?或者我能做的更短的事情?
选择更好的命名方案,例如:
<a href="#vb-showform2">Click To show VB6 Form2</a>
<a href="#vb-waffles">Waffles</a>
然后通过 BeforeNavigate2
事件拦截 link 点击,查看 url 如果它匹配 #vb-*
运行 你的代码:
Private Sub WebBrowserCtrl_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, Flags As Variant, TargetFrameName As Variant, PostData As Variant, Headers As Variant, Cancel As Boolean)
'// get #vb-XXX command from url
Dim pos As Long: pos = InStrRev(URL, "#vb-")
If pos Then
Cancel = True '// stop default navigation
URL = Mid$(URL, pos + 4)
Select Case LCase$(URL)
Case "showform2": Form2.Show
'...
Case "waffles": MsgBox "Waffles."
Case Else: MsgBox "Unknown Command " & URL
End Select
End If
End Sub
与其将表单名称放在 href
属性中,我相信更好的方法是设置一个 your own data attribute
并使用它,在我看来,这是完成此类任务的一种更简洁的方法。
在我的示例中,在 href
标签内我使用经典的 void(0)
来防止 link 导航,否则您的外部 link 到 VB 表单可能会破坏浏览器历史记录并产生意想不到的结果。
要使用 WebBrowser
控件,您应该已经在 VB 项目中添加了对 Microsoft Internet Controls
的引用,接下来您需要添加对 Microsoft HTML Library
,包含在 mshtml.tlb
文件中的类型库。
假设您的 WebBrowser
控件被称为 "WebBrowser1",并且您有三个额外的表单,分别称为 "Form1"、"Form2" 和 "Form3",在以下表单中你放置了 WebBrowser
控件把这段代码:
Private HTMLdoc As MSHTML.HTMLDocument
' Create a Web Page to test the navigation '
' You can skip this phase after your test are successfully executed '
Private Sub Form_Load()
Dim HTML As String
WebBrowser1.Navigate "about:blank"
HTML = "<html>"
HTML = HTML & "<title>Open a VB Form from a Link</title>"
HTML = HTML & "<body>"
HTML = HTML & "<a data-vb='Form1' href='javascript:void(0)'>Click To show Form1</a>"
HTML = HTML & "</br>"
HTML = HTML & "<a data-vb='Form2' href='javascript:void(0)'>Click To show Form2</a>"
HTML = HTML & "</br>"
HTML = HTML & "<a data-vb='Form3' href='javascript:void(0)'>Click To show Form3</a>"
HTML = HTML & "</br>"
HTML = HTML & "</body>"
HTML = HTML & "</html>"
WebBrowser1.Document.Write HTML
End Sub
' This will load and show the form specified in the data-vb attribute of the link '
Private Sub WebBrowser1_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, Flags As Variant, TargetFrameName As Variant, PostData As Variant, Headers As Variant, Cancel As Boolean)
Dim frm As Form, FormName as String
If Not (WebBrowser1.Document Is Nothing) Then
Set HTMLdoc = WebBrowser1.Document
FormName = vbNullString & HTMLdoc.activeElement.getAttribute("data-vb")
If Not FormName = vbNullString Then
Set frm = Forms.Add(FormName)
frm.Show
End If
End If
End Sub
补充说明:
您可以通过以下方式获取link点击的内容:
HTMLdoc.activeElement.toString
显然,对于我的测试页中的所有 link,结果将是:
javascript:void(0)
与 BeforeNavigate 事件的 URL 参数相同。
您可以从 HTMLDocument
中获得但在 BeforeNavigate
事件中不可用的另一个有用信息是,例如:
HTMLdoc.activeElement.outerHTML
结果将是:
<A href="javascript:void(0)" data-vb="Form2">Click To show Form2</A>
要使用按钮而不是 link 执行此操作,请将按钮添加到文档和一些 javascript:
<input type="button" id="MyButton1_id" style="cursor: pointer" name=MyButton1 value="Show It!">
<SCRIPT LANGUAGE="VBScript">
Sub MyButton1_OnClick()
location.href = "event:button1_show"
End Sub
</SCRIPT>
然后在BeforeNavigate2
事件中:
Public Sub webBrowser_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, flags As Variant, TargetFrameName As Variant, PostData As Variant, Headers As Variant, Cancel As Boolean)
Select Case LCase$(URL)
Case "event:button1_show"
Cancel = True
Form2.Show
Case "event:other_stuff"
'other stuff to do, etc
End Select
End Sub
我正在使用 VB6 WebBrowser,这里我需要在用户单击 WebBrowser
的 link 的任何特定 link 时打开一个 vb6 表单,例如
在HTML
<html>
<head>
<body>
<a href="--show vb6 form--">Click To show VB6 Form2</a>
</body>
</html>
我不知道该怎么做。我想有时它可以完成第三个文本文件,例如单击 link 时会在文本文件中写入 002
之类的鳕鱼。
而在 vb 表格中,计时器将每秒检查一次文件,当计时器检测到文件包含 002
时,它将显示表格。
这个方法可以吗?或者我能做的更短的事情?
选择更好的命名方案,例如:
<a href="#vb-showform2">Click To show VB6 Form2</a>
<a href="#vb-waffles">Waffles</a>
然后通过 BeforeNavigate2
事件拦截 link 点击,查看 url 如果它匹配 #vb-*
运行 你的代码:
Private Sub WebBrowserCtrl_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, Flags As Variant, TargetFrameName As Variant, PostData As Variant, Headers As Variant, Cancel As Boolean)
'// get #vb-XXX command from url
Dim pos As Long: pos = InStrRev(URL, "#vb-")
If pos Then
Cancel = True '// stop default navigation
URL = Mid$(URL, pos + 4)
Select Case LCase$(URL)
Case "showform2": Form2.Show
'...
Case "waffles": MsgBox "Waffles."
Case Else: MsgBox "Unknown Command " & URL
End Select
End If
End Sub
与其将表单名称放在 href
属性中,我相信更好的方法是设置一个 your own data attribute
并使用它,在我看来,这是完成此类任务的一种更简洁的方法。
在我的示例中,在 href
标签内我使用经典的 void(0)
来防止 link 导航,否则您的外部 link 到 VB 表单可能会破坏浏览器历史记录并产生意想不到的结果。
要使用 WebBrowser
控件,您应该已经在 VB 项目中添加了对 Microsoft Internet Controls
的引用,接下来您需要添加对 Microsoft HTML Library
,包含在 mshtml.tlb
文件中的类型库。
假设您的 WebBrowser
控件被称为 "WebBrowser1",并且您有三个额外的表单,分别称为 "Form1"、"Form2" 和 "Form3",在以下表单中你放置了 WebBrowser
控件把这段代码:
Private HTMLdoc As MSHTML.HTMLDocument
' Create a Web Page to test the navigation '
' You can skip this phase after your test are successfully executed '
Private Sub Form_Load()
Dim HTML As String
WebBrowser1.Navigate "about:blank"
HTML = "<html>"
HTML = HTML & "<title>Open a VB Form from a Link</title>"
HTML = HTML & "<body>"
HTML = HTML & "<a data-vb='Form1' href='javascript:void(0)'>Click To show Form1</a>"
HTML = HTML & "</br>"
HTML = HTML & "<a data-vb='Form2' href='javascript:void(0)'>Click To show Form2</a>"
HTML = HTML & "</br>"
HTML = HTML & "<a data-vb='Form3' href='javascript:void(0)'>Click To show Form3</a>"
HTML = HTML & "</br>"
HTML = HTML & "</body>"
HTML = HTML & "</html>"
WebBrowser1.Document.Write HTML
End Sub
' This will load and show the form specified in the data-vb attribute of the link '
Private Sub WebBrowser1_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, Flags As Variant, TargetFrameName As Variant, PostData As Variant, Headers As Variant, Cancel As Boolean)
Dim frm As Form, FormName as String
If Not (WebBrowser1.Document Is Nothing) Then
Set HTMLdoc = WebBrowser1.Document
FormName = vbNullString & HTMLdoc.activeElement.getAttribute("data-vb")
If Not FormName = vbNullString Then
Set frm = Forms.Add(FormName)
frm.Show
End If
End If
End Sub
补充说明:
您可以通过以下方式获取link点击的内容:
HTMLdoc.activeElement.toString
显然,对于我的测试页中的所有 link,结果将是:
javascript:void(0)
与 BeforeNavigate 事件的 URL 参数相同。
您可以从 HTMLDocument
中获得但在 BeforeNavigate
事件中不可用的另一个有用信息是,例如:
HTMLdoc.activeElement.outerHTML
结果将是:
<A href="javascript:void(0)" data-vb="Form2">Click To show Form2</A>
要使用按钮而不是 link 执行此操作,请将按钮添加到文档和一些 javascript:
<input type="button" id="MyButton1_id" style="cursor: pointer" name=MyButton1 value="Show It!">
<SCRIPT LANGUAGE="VBScript">
Sub MyButton1_OnClick()
location.href = "event:button1_show"
End Sub
</SCRIPT>
然后在BeforeNavigate2
事件中:
Public Sub webBrowser_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, flags As Variant, TargetFrameName As Variant, PostData As Variant, Headers As Variant, Cancel As Boolean)
Select Case LCase$(URL)
Case "event:button1_show"
Cancel = True
Form2.Show
Case "event:other_stuff"
'other stuff to do, etc
End Select
End Sub