网页脚本(javascript)调用VB函数的另类方法
不用通过IDocHostUIHandler接口,让网页调用VB程序中的函数的方法。 该方法原理是:在网页中通过导航到一个特定的自定义网址,这个网址 就表示我们要调用的VB中的函数,然后在WebBrowser控件的BeforeNavigate2 事件处理函数中检测是否是我们自定义的网址,如果是,则根据不同的约定 调用不同的函数,从而间接实现从网页调用VB函数的目的 ### 网页脚本(JavaScript)调用VB函数的另类方法 #### 方法概述 在常规场景下,想要从网页脚本(如JavaScript)调用VB程序中的函数,通常会涉及COM对象、ActiveX控件等技术,并可能需要通过`IDocHostUIHandler`接口来实现交互。然而,本文介绍了一种较为特殊的实现方式——即不通过`IDocHostUIHandler`接口,而是通过自定义URL方案与WebBrowser控件的结合来实现这一目的。 #### 原理详解 这种方法的核心原理在于利用网页中的自定义URL方案来触发VB程序中的特定函数。具体而言: 1. **创建自定义URL方案**:在网页中设置一个特定格式的自定义URL(例如以`Event:`开头),该URL用于表示要调用的VB函数名称。 2. **WebBrowser控件监听**:通过WebBrowser控件的`BeforeNavigate2`事件处理函数来捕获网页中导航至这些自定义URL的动作。 3. **调用VB函数**:当检测到符合约定的自定义URL时,根据URL中携带的信息调用相应的VB函数。 #### 实现步骤 下面将详细讲解如何实现这一机制: 1. **VB程序端准备**: - 创建一个包含WebBrowser控件的VB应用程序。 - 在应用程序中编写需要被调用的函数。 ```vb Private Sub MyHello() MsgBox "Hello from VB APP" ' 可以在此处执行其他逻辑,比如修改Web页面的状态或传递值到网页上 WebBrowser1.Document.All("field1").Value = "Hello from VB" End Sub Private Sub MyClose() If MsgBox("是否要关闭?", vbYesNo) = vbYes Then Unload Me End If End Sub ``` 2. **WebBrowser控件配置**: - 在VB应用程序加载时初始化WebBrowser控件并导航到目标HTML文件。 ```vb Private Sub Form_Load() WebBrowser1.Navigate "c:\mytest.htm" End Sub ``` 3. **事件处理函数**: - 使用`BeforeNavigate2`事件处理函数来拦截对特定自定义URL的请求,并根据URL调用对应的VB函数。 ```vb 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 Ev As String If UCase$(Left$(URL, 6)) = "EVENT:" Then ' 提取自定义URL中的函数名 Ev = UCase$(Mid$(URL, 7)) Select Case Ev Case "HELLO" ' 调用MyHello函数 MyHello Case "CLOSE" ' 调用MyClose函数 MyClose End Select Cancel = True End If End Sub ``` 4. **网页端配置**: - 在HTML文件中设置两个按钮,分别对应于两个自定义URL,用于触发对应的VB函数。 ```html <HTML> <BODY> <INPUT type="text" name="field1"> <p> <INPUT type="button" name="Hello" value="Hello World" onclick="Hello_OnClick()"> <INPUT type="button" name="Close" value="Close App" onclick="Close_OnClick()"> <SCRIPT LANGUAGE="VBScript"> Sub Hello_OnClick() location.href = "Event:Hello" End Sub Sub Close_OnClick() location.href = "Event:Close" End Sub </SCRIPT> </BODY> </HTML> ``` 5. **运行与测试**: - 启动VB应用程序并加载指定的HTML文件。 - 测试点击两个按钮是否能正确地触发VB函数并返回预期结果。 #### 结论 通过上述方法,我们成功绕过了传统的`IDocHostUIHandler`接口限制,实现了从网页脚本直接调用VB程序中的函数。这种方法不仅提供了一种新颖的技术解决方案,还为跨语言间的程序交互开辟了新的思路。需要注意的是,在实际应用过程中还需考虑到安全性和兼容性问题,确保代码的安全可靠运行。
不用通过IDocHostUIHandler接口,让网页调用VB程序中的函数的方法。
该方法原理是:在网页中通过导航到一个特定的自定义网址,这个网址
就表示我们要调用的VB中的函数,然后在WebBrowser控件的BeforeNavigate2
事件处理函数中检测是否是我们自定义的网址,如果是,则根据不同的约定
调用不同的函数,从而间接实现从网页调用VB函数的目的
具体方法如下:
1、在VB中创建一个EXE工程,增加对Webbrowser控件的引用
2、在Form1中放上Webbrowser控件
3、在Webbrowser中导航到我们的网页,在这个网页中有调用VB函数的代码
Private Sub Form_Load()
WebBrowser1.Navigate "c:\mytest.htm"
End Sub
4.增加我们的函数
Private Sub MyHello()
MsgBox "Hello from VB APP"
'在这里我们可以写入一些有用的信息当作函数的返回值供网页使用
WebBrowser1.Document.All("field1").Value ="Hello from VB"
End Sub
private sub MyClose()
If MsgBox("是否真的要退出?", vbYesNo) = vbYes Then
unload me
End If
end sub
4、增加Webbrowser的事件处理函数
Private Sub WebBrowser1_BeforeNavigate2(ByVal pDisp As Object, _
URL As Variant, Flags As Variant, _
- 粉丝: 1
- 资源: 10
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 章节1:Python入门视频
- 无需样板的 Python 类.zip
- ESP32 : 32-bit MCU & 2.4 GHz Wi-Fi & BT/BLE SoCs
- 博物馆文博资源库-JAVA-基于springBoot博物馆文博资源库系统设计与实现
- 旅游网站-JAVA-springboot+vue的桂林旅游网站系统设计与实现
- 小说网站-JAVA-基于springBoot“西贝”小说网站的设计与实现
- 游戏分享网站-JAVA-基于springBoot“腾达”游戏分享网站的设计与实现
- 学习交流-JAVA-基于springBoot“非学勿扰”学习交流平台设计与实现
- EDAfloorplanning
- 所有课程均提供 Python 复习部分.zip
- 1
- 2
- 3
前往页