当前位置:编程学习 > VB >>

VB.net中通过js调用window.external下面的方法

   本人最近在做一个视频对话的功能,这个视频对话功能主要分为两个部分,服务器和客户端,服务器用ASP.NET开发,网页中嵌套一个用VC写的程序,用来调用视频对话的Actix控件。
   服务端现在基本跑通,现在主要问题在客户端,客户端是用VB.NET写的,我在视频的页面里面定义了一个WebBrowser,通过WebBrowser调用一个静态网页,通过网页中的JS调用external.xxx来调用本地注册的com组件。但是说external属性不存在。
一下是代码:

  页面代码
  <System.Runtime.InteropServices.ComVisibleAttribute(True)> _
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim fileContents As String
        fileContents = My.Computer.FileSystem.ReadAllText(Application.StartupPath & "\error1.html")

        WebBrowser1.DocumentText = fileContents
        WebBrowser1.ObjectForScripting = Me
        WebBrowser1.Navigate(Application.StartupPath & "\error1.html")
    End Sub


    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim param() As Object = New Object() {"你好", "猪八戒"}
        WebBrowser1.Document.InvokeScript("StartUp")
    End Sub

End Class


   HTML页面JS代码:
<script type="text/javascript">
function StartUp()
{
var strAdmin = "admin";
var strPwd = "698D51A19D8A121CE581499D7B701668";
var strIp = "192.168.0.55";
var strConf = "上海消防总队";
external.StartUpAv(strAdmin,strPwd,strIp,strConf,1);
}
function hallo(ss, name) {
    alert(ss + name);
 }
function sayHallo() {
    alert(window.external);
    window.external.Test("hello", 15);     
 }
</script>

请问下问题出在哪里? 我用VB6的webbrowser,在自己的程序中是可以接收到window.external.方法名(参数)
原理里是实现webbrowser的接口,我不知道.net中怎么用。
引用 1 楼 vansoft 的回复:
我用VB6的webbrowser,在自己的程序中是可以接收到window.external.方法名(参数)
原理里是实现webbrowser的接口,我不知道.net中怎么用。


能不能发来看看?  求教   la0475@163.com
引用 1 楼 vansoft 的回复:
我用VB6的webbrowser,在自己的程序中是可以接收到window.external.方法名(参数)
原理里是实现webbrowser的接口,我不知道.net中怎么用。


vb6中咋弄呀,有没有代码?完整的
引用 3 楼 xiaoyao961 的回复:
Quote: 引用 1 楼 vansoft 的回复:

我用VB6的webbrowser,在自己的程序中是可以接收到window.external.方法名(参数)
原理里是实现webbrowser的接口,我不知道.net中怎么用。


vb6中咋弄呀,有没有代码?完整的


http://blog.csdn.net/vansoft/article/details/3547261
引用 2 楼 la0475 的回复:
Quote: 引用 1 楼 vansoft 的回复:

我用VB6的webbrowser,在自己的程序中是可以接收到window.external.方法名(参数)
原理里是实现webbrowser的接口,我不知道.net中怎么用。


能不能发来看看?  求教   la0475@163.com


http://blog.csdn.net/vansoft/article/details/3547261 VB6实现界面与功能代码分离 ,有什么用?如果只是为了分离
比方网页上点什么,软件上就执行相应的功能,那只要用一个<a HREF就可以了
按不同的链接执行不同的功能,并且网页并不会切换到另一个界面
比方http://www.baidu.com/#3 #4
这种标签式的原理也行
引用 1 楼 vansoft 的回复:
我用VB6的webbrowser,在自己的程序中是可以接收到window.external.方法名(参数)
原理里是实现webbrowser的接口,我不知道.net中怎么用。


用Implements IDocHostUIHandler这个是可以,但是他本身的LIB就有500K,我做好的程序可能才50K呢olelib这个库太大了,要是能直接用VB实现的话,没必要用别的组件,否则要是大家都不知道这个组件,岂不是就无法实现了?

现在呢,我碰到的一个问题是,JAVASCRIPT调用某个内部函数时,能在VB中拦截掉获取就好了,这样就有办法处理了。

比方网页上有一个方法:external.HelloWorld();
一旦执行,VB能拦截到就好了
Private WithEvents Doc As HTMLDocument


Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
    Set Doc = WebBrowser1.Document
 
End Sub

这个有很多事件,onclick等等,就是不知哪一个是ONscript run(脚本调用),有这个就很简单了
Quote: 引用 楼主 wanghongli5201314 的回复:

<a href="javascript:runcommand('jiafa(5,3)')">加法计算3</a><br><br>
<a href="javascript:runcommand('external.jiafa(5,3)')">加法计算4</a><br><br>

我现在用的是这种方法,用了我这方法之后,那就可以不需要olelib这个tlb库了,也就是说如果这些external都是人为自已写的,那用我的就完全可以搞定了,但是如果调用时不带runcommand('这样的方法,那就不行

纯粹这样一句话,我是没办法执行的:external.HelloWorld()
引用 5 楼 vansoft 的回复:
Quote: 引用 2 楼 la0475 的回复:

Quote: 引用 1 楼 vansoft 的回复:

我用VB6的webbrowser,在自己的程序中是可以接收到window.external.方法名(参数)
原理里是实现webbrowser的接口,我不知道.net中怎么用。


能不能发来看看?  求教   la0475@163.com


http://blog.csdn.net/vansoft/article/details/3547261

O(∩_∩)O谢谢
引用 7 楼 xiaoyao961 的回复:
Quote: 引用 1 楼 vansoft 的回复:

我用VB6的webbrowser,在自己的程序中是可以接收到window.external.方法名(参数)
原理里是实现webbrowser的接口,我不知道.net中怎么用。


用Implements IDocHostUIHandler这个是可以,但是他本身的LIB就有500K,我做好的程序可能才50K呢olelib这个库太大了,要是能直接用VB实现的话,没必要用别的组件,否则要是大家都不知道这个组件,岂不是就无法实现了?

现在呢,我碰到的一个问题是,JAVASCRIPT调用某个内部函数时,能在VB中拦截掉获取就好了,这样就有办法处理了。

比方网页上有一个方法:external.HelloWorld();
一旦执行,VB能拦截到就好了
Private WithEvents Doc As HTMLDocument


Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
    Set Doc = WebBrowser1.Document
 
End Sub

这个有很多事件,onclick等等,就是不知哪一个是ONscript run(脚本调用),有这个就很简单了


lib库开发时用,发布时根本不需要的。 同意楼上,难怪xiaoyao961同学对tlb库这么抵触,原来他以为发布时需要打包进去 关注,我现在有个页面的功能需要activex控件实现,但是在ie8下面正常的控件,到了ie10就不行了,后来我就改用bho来实现(c#的),但是现在的问题是,我怎么通过 window.external.xxx(); 来调用bho中的xxx方法?听说实现IDocHostUIHandler可以做到,但是不知道具体怎么做啊?
补充:VB ,  COM/DCOM/COM+
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,