bcrun大哥,你好, vbRichClient5库 cWebKit组件的问题,请帮忙

CHRL 2014-10-10 06:03:34
请bcrun大哥帮忙看看

DDD.html

<html>
<head>
<script language="javascript">
function aa()
{
alert('An onMouseOver event');return false
//<div onmousemove="javascript:aa()">asdfasdfasdfasdf</div>
}
</script>
</head>
<body>
<div id='abc1'>asdfasdfasdfwerasdfqwer</div>
<a href="javascript:aa()">This is a link</a>
</body>
</html>

WebControl.ctl

Option Explicit

Private WithEvents oWebKit As cWebKit

Public Property Get Browser() As cWebKit
Set Browser = oWebKit
End Property

Private Sub oWebKit_JSEventCallBack(EventName As String, JSONEventObj As vbRichClient5.cCollection, JSONResult As vbRichClient5.cCollection)
MsgBox EventName & vbTab & ",JSEventCallBack"
End Sub

Private Sub oWebKit_NewWindowRequest(NewWebKitInstance As vbRichClient5.cWebKit, ByVal OpenAsTab As Boolean)
Set oWebKit = NewWebKitInstance
OpenAsTab = True
End Sub

Private Sub UserControl_Initialize()
Set oWebKit = New_c.WebKit(True, "D:\Work\vbRC5BaseDlls")
oWebKit.InitWebKitDll "WebKit.dll"
oWebKit.InitializeView UserControl.hWnd
End Sub

Private Sub UserControl_Resize()
On Error Resume Next
UserControl.ScaleMode = vbPixels
oWebKit.Move 0, 0, UserControl.ScaleWidth, UserControl.ScaleHeight
End Sub

Private Sub UserControl_Terminate()
Set oWebKit = Nothing
End Sub



frmMain.frm

Option Explicit

Private Sub Command_Click()
wcMain.Browser.Navigate2 App.Path & "\DDD.html"
Dim a As IDOMDocument
'在執行這一句的時候老報錯是怎麼回事呀?
Set a = wcMain.Browser.GetElementByID("abc1")
End Sub
Private Sub Form_Resize()
On Error Resume Next
wcMain.Move wcMain.Left, wcMain.Top, Me.Width - 500, Me.Height - wcMain.Top - 600
End Sub

Private Sub Form_Unload(Cancel As Integer)
New_c.CleanupRichClientDll
End Sub
...全文
921 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
vbweb 2014-11-27
  • 打赏
  • 举报
回复
chrl您好,本人是个业余的VB爱好者,在CSDN论坛上看到您最近正在研究vbrichclient5,webkit,本人目前也准备研究这个东西,但本人的技术实在是太业余了,一点头绪都没有,想请您看能不能发一些关于这方面的源码供我参考,谢谢了。联系邮箱:xgpgood@qq.com
CHRL 2014-10-14
  • 打赏
  • 举报
回复
引用 6 楼 bcrun 的回复:
没时间建工程实际测试,不过看楼主给的代码不太对劲。浏览器控件的Navigate2方法不一般是异步执行的吗,如IE的那个则一般是在DocumentComplete这样的事件过程里,才访问他的DOM元素的吧。 至于你后面说的用这些代码调用正常: AddScript,LoadHTMLString 这也好理解,本来这样直接添加的,就是同步的,也即按顺序执行的嘛。
谢谢你,果然是异步执行的问题,这个问题是可以了,但是还有一点不明白的,请大哥指点一下,请看如下代码:

Dim a As IDOMElement
Set a = wcMain.Browser.GetElementByID("btnAdd")
'用 AddScript 加入jQuery庫以后
'這一句可以
a.setAttribute "onclick", "javascript: window.location=""http://192.168.91.24/htdocs/a.gif"";"

'這一句不行,也就是不能讀本地的圖片資源,不知道為什麼?
a.setAttribute "onclick", "javascript: window.location=""file:///c:/a.gif"";"
bcrun 2014-10-14
  • 打赏
  • 举报
回复
这个大概是跨域安全问题,你引用的资源最好是在页面的子目录下。也许Webkit核心的控件有某个方法可以取消掉这些跨域安全检查,不过那就要问熟悉这控件的人了。
bcrun 2014-10-13
  • 打赏
  • 举报
回复
没时间建工程实际测试,不过看楼主给的代码不太对劲。浏览器控件的Navigate2方法不一般是异步执行的吗,如IE的那个则一般是在DocumentComplete这样的事件过程里,才访问他的DOM元素的吧。 至于你后面说的用这些代码调用正常: AddScript,LoadHTMLString 这也好理解,本来这样直接添加的,就是同步的,也即按顺序执行的嘛。
CHRL 2014-10-11
  • 打赏
  • 举报
回复
引用 3 楼 CHRL 的回复:

wcMain.Browser.Navigate2 App.Path & "\DDD.html"
Dim a As IDOMDocument
Dim b As IDOMElement
Dim c As IDOMElement

'这样可以
Set a = wcMain.Browser.Document
Set b = a.documentElement()

‘这一句就不行
Set c = a.GetElementByID("abc1")

Dim d As cCollection Set d = wcMain.Browser.GetElementsByTagName("div") ’这样可以哦
CHRL 2014-10-11
  • 打赏
  • 举报
回复

wcMain.Browser.Navigate2 App.Path & "\DDD.html"
Dim a As IDOMDocument
Dim b As IDOMElement
Dim c As IDOMElement

'这样可以
Set a = wcMain.Browser.Document
Set b = a.documentElement()

‘这一句就不行
Set c = a.GetElementByID("abc1")

CHRL 2014-10-11
  • 打赏
  • 举报
回复
引用 4 楼 CHRL 的回复:
[quote=引用 3 楼 CHRL 的回复:]

wcMain.Browser.Navigate2 App.Path & "\DDD.html"
Dim a As IDOMDocument
Dim b As IDOMElement
Dim c As IDOMElement

'这样可以
Set a = wcMain.Browser.Document
Set b = a.documentElement()

‘这一句就不行
Set c = a.GetElementByID("abc1")

Dim d As cCollection Set d = wcMain.Browser.GetElementsByTagName("div") ’这样可以哦[/quote] 但是如果我直接这样写又行,不知道为什么会这样:

wcMain.Browser.AddScript "function aa(){alert('An onMouseOver event');return false}"
DoEvents
wcMain.Browser.LoadHTMLString "<body><div id='abc1'>你好,我愛死你了</div><div id='abc2' onClick=""javascript:aa()"">我不好</div></body>"
    
Dim b As IDOMNode
Set b = wcMain.Browser.GetElementByID("abc1")
'取出id文本
MsgBox b.textContent

wcMain.Browser.NodeReplaceInnerHTML b, "他也好,我愛死你了"

'給abc1增加一個click事件
wcMain.Browser.RegisterEventCallbackOn b, "onclick", "DEF"
无·法 2014-10-10
  • 打赏
  • 举报
回复
Set a = wcMain.Browser.GetElementByID("abc1") 改成 Set a = wcMain.Browser.Document.GetElementByID("abc1") 试试看
笨狗先飞 2014-10-10
  • 打赏
  • 举报
回复
关注,帮顶。

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧