Office中国论坛/Access中国论坛

标题: 窗体与WebBrowse交互(从todaynew学来的) [打印本页]

作者: zhuyiwen    时间: 2012-8-27 10:57
标题: 窗体与WebBrowse交互(从todaynew学来的)
先看代码:
  1. Option Compare Database
  2. Option Explicit

  3. Private Sub Command1_Click()
  4.     WebBrowser0.Document.parentWindow.test "called from Access Form"
  5. End Sub

  6. Private Sub Form_Load()
  7.     WebBrowser0.Navigate "about:blank"
  8.     DoEvents

  9.     Do While WebBrowser0.Busy
  10.         DoEvents
  11.     Loop

  12.     WebBrowser0.Document.Write _
  13.         "<html><head><script>" & vbCr & _
  14.         "var accForm; " & vbCr & _
  15.         "function test(message) { alert(message); }" & vbCr & _
  16.         "</script></head><body><button " & vbCr & _
  17.         "onclick=""accForm.test('called from script code')"">" & vbCr & _
  18.         "call client code from script code</button>" & vbCr & _
  19.         "</body></html>"
  20.     Set WebBrowser0.Document.parentWindow.accForm = Me
  21. End Sub

  22. Public Sub test(ByVal message As String)
  23.     MsgBox message
  24. End Sub
复制代码
新建一个窗体,在窗体上放一个Microsoft Web控件和一个命令按钮,分别命名为 WebBrowse0 和 Command1,在窗体的 VBA 模块中输入上述代码。运行窗体,得到如下效果:
当点击 Command1 时:
[attach]50255[/attach]
当点击WebBrowse控件中的按钮时:
[attach]50256[/attach]

意思是点击Access的按钮执行页面的javascript函数,而点击页面中的按钮则执行Access窗体中的方法。

更好的示例:  (2012-08-28 添加)
Todaynew:WebBrowser控件与数据库交互示例

作者: zhuyiwen    时间: 2012-8-27 10:59
很有意思,我们可以通过 WebBrowse.Document.parentWindow这个对象来实现交互。

有了这个,再实现 歌逸新平台:MS Access 和 JQuery 打造最炫界面
http://www.office-cn.net/forum.p ... 088&fromuid=625



就应该不是很困难了。
作者: t小宝    时间: 2012-8-27 11:28
Access的Web化浪潮来了...
作者: gnoy    时间: 2012-8-27 11:39
不错,不用说从谁那里学来的,代码我看得很熟悉,天下文章都是抄来的,哈哈。。。

对于带超链接的还有一个更简单的,就是捕捉URL
作者: todaynew    时间: 2012-8-27 12:03
WebBrowser0.Document.Write 似乎可以遍历数据库做出各种各样的数据呈现形式。

另外,提供的关于WebBrowser0方面资料的链接地址上的文字不是我写的,我只是找来学习了一下,呵呵。
作者: tmtony    时间: 2012-8-27 12:09
很强,我也弄了半天,也大同小异。
看来gnoy勾起了大伙们的兴趣。
作者: 叶海峰    时间: 2012-8-27 13:10
但在access里面用WebBrowse,有时候会很灵异.曾经试过用wb(WebBrowse)去navitegate本地的一个swf文件,失败.同样的代码,同样是调用wb控件,在vb,excel的userform里面做却可以加载成功.把userform导出frm在access导入,还是失败.不知道是什么原因导致失败.可能是跟Acess的运行环境有关,因为有的电脑是加载成功的
所以至今Access里面用这个控件,还是有点怕怕的.不知道会有什么不可预料的事情发生.
作者: todaynew    时间: 2012-8-27 14:20
有个奇怪的问题想问一下:
dim txt as string
txt="将html代码逐段的写给这个变量"
WebBrowser0.Document.Write  txt
到此为止,WebBrowser0可以显示出写入的html代码。

但是,下面的语句就会报错:
Set WebBrowser0.Document.parentWindow.accForm = Me
这是什么原因?
作者: zhuyiwen    时间: 2012-8-27 15:36
todaynew 发表于 2012-8-27 14:20
有个奇怪的问题想问一下:
dim txt as string
txt="将html代码逐段的写给这个变量"
WebBrowser0.Document.Write  txt
到此为止,WebBrowser0可以显示出写入的html代码。

但是,下面的语句就会报错:
Set WebBrowser0.Document.parentWindow.accForm = Me
这是什么原因?


accForm 是网页中的一个对象变量

应该这样写
  1. dim txt as string
  2. txt="<script>var accForm;</script>" & _
  3.     "将html代码逐段的写给这个变量"
  4. WebBrowser0.Document.Write  txt

  5. ' 这样就不会报错了:
  6. Set WebBrowser0.Document.parentWindow.accForm = Me
复制代码
目的,是把当前窗体对象传递到网页。
作者: 叶海峰    时间: 2012-8-27 15:41
没报错啊

Private Sub Form_Load()
   Dim str As String
   
    str = "<html><head><script>" & vbCr & _
        "var accForm; " & vbCr & _
        "function test(message) { alert(message); }" & vbCr & _
        "</script></head><body><button " & vbCr & _
        "onclick=""accForm.test('called from script code')"">" & vbCr & _
        "call client code from script code</button>" & vbCr & _
        "</body></html>"
   
    WebBrowser0.Navigate "about:blank"
    DoEvents

    Do While WebBrowser0.Busy
        DoEvents
    Loop

    WebBrowser0.Document.Write str
        
Set WebBrowser0.Document.parentWindow.accForm = Me
End Sub

作者: todaynew    时间: 2012-8-27 16:20
叶海峰 发表于 2012-8-27 15:41
没报错啊

Private Sub Form_Load()

可能我构造的字符串有些问题,呵呵。
作者: 叶海峰    时间: 2012-8-27 16:27
看来前辈是爱上这个WB了
作者: roych    时间: 2012-8-27 18:56
感觉很像Javascript里的InnerHTML。。。用DOM实现起来似乎很容易。
作者: 叶海峰    时间: 2012-8-27 21:09
roych 发表于 2012-8-27 18:56
感觉很像Javascript里的InnerHTML。。。用DOM实现起来似乎很容易。

WeBroswer.Document是有innerText和innerHTML两个属性的,一个返回纯文本,一个返回html格式文本
作者: zhuyiwen    时间: 2012-8-28 23:10
更好的示例:  (2012-08-28 添加)
Todaynew:WebBrowser控件与数据库交互示例





欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3