注册 登录
编程论坛 VFP论坛

请教VB操作webbrowser代码改vfp代码,谢谢

wxzd123 发布于 2023-02-22 07:13, 2176 次点击
根据id直接click
<button id="wordsearchbtn" class="btn">查询</button>
此按钮的点击方法
Webbrowser1.Document.GetElementsByTagname("button")("wordsearchbtn").Click
如何把上面代码改成vfp代码,谢谢
23 回复
#2
cjc10102023-02-22 08:14
thisform.Webbrowser1.Document.GetElementByID("wordsearchbtn").click 试试
#3
吹水佬2023-02-22 10:14
用代码直接执行对象的click,如果html不是自己写的有可能不会触发click事件。
#4
wxzd1232023-02-22 14:58
回复 2楼 cjc1010
点击没有反应
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

直接用鼠标点击webbrowser上的网页按钮可用,点击表单上的就没有反应
 Thisform.Web1.Document.getElementById('button1').click()
网页代码
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

 <title>Document</title>
</head>
<body>

<div style="text-align:center">
  <button onclick="playPause()" id="button1">播放/暂停</button>
  <button onclick="makeBig()">放大</button>
  <button onclick="makeSmall()">缩小</button>
  <button onclick="makeNormal()">普通</button>
  <br>
  <video id="video1" width="420">
    <source src="movie.mp4" type="video/mp4">
    您的浏览器不支持 HTML5 video 标签。
  </video>
</div>

<script>
var myVideo=document.getElementById("video1");

function playPause()
{
    if (myVideo.paused)
      myVideo.play();
    else
      myVideo.pause();
}

    function makeBig()
{
    myVideo.width=560;
}

    function makeSmall()
{
    myVideo.width=320;
}

    function makeNormal()
{
    myVideo.width=420;
}
</script>

</body>
</html>
#5
wxzd1232023-02-22 14:59
回复 3楼 吹水佬
自己写的按钮
#6
吹水佬2023-02-22 15:47
自己写的就好办,加个鼠标事件,VFP用JS代码去触发这个鼠标事件就可以。
#7
wxzd1232023-02-22 15:58
回复 6楼 吹水佬
版主这样没反应
网页代码:
<button onclick="playPause()" id="button1">播放/暂停</button>

vfp代码
 Thisform.Web1.Document.getElementById('button1').click
#8
吹水佬2023-02-22 18:21
回复 7楼 wxzd123
3楼回复有提到
#9
wxzd1232023-02-22 19:33
回复 8楼 吹水佬
版主好,实在找不到有参考的东东,版主辛苦一下给一段示例代码,谢谢
#10
吹水佬2023-02-22 21:40
以下是引用wxzd123在2023-2-22 19:33:23的发言:

版主好,实在找不到有参考的东东,版主辛苦一下给一段示例代码,谢谢

可以参考 vfp WebView2 Demo 示例“vfp调用web代码”
#11
pvm20002023-02-23 00:53
跨界做点东西真不容易!
#12
wxzd1232023-02-23 08:18
回复 10楼 吹水佬
版主你好
看了WebView2代码
    * html代码(web测试代码)
TEXT TO htmlCode TEXTMERGE NOSHOW PRETEXT 7
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>vfp运行web代码</title>
    <script>
        var e = document.createEvent("MouseEvents");
        e.initEvent("click", true, true);
        
        function test()
        {
            alert("点击了test按键");
        }
    </script>
</head>
<body>
    <pre>
    <h2>vfp运行web代码</h2>
    <button id="vfprun" onclick="test()">test</button>
    </pre>
</body>
</html>
ENDTEXT

WebView_NavigateHtml(STRCONV(htmlCode+0h00,5))                  && 打开html
INKEY(1)                                                        && 因 Navigate 是异步的,此时要中断一下
jsCode = [document.getElementById("vfprun").dispatchEvent(e);]  && 执行点击按键
WebView_ExecuteScript(STRCONV(jsCode+0h00,5))                   && 解释html之后执行
这里的.dispatchEvent(e)和WebView_ExecuteScript(STRCONV(jsCode+0h00,5)) 是不是和您做的myWebViewDll.dll有关,这个WebView2看着用起来太复杂,我用的是webbrowser,请版主指导一下,辛苦了,谢谢
#13
吹水佬2023-02-23 08:45
回复 12楼 wxzd123
只作参考,不能照搬。
主要是 JS 和 HTML 代码部分
WebBrowser控件也可以运行JS代码
如果要照搬,就用 WebView2
#14
星光悠蓝2023-02-23 09:27
以下是引用pvm2000在2023-2-23 00:53:26的发言:

跨界做点东西真不容易!

空闲时间还挺多
#15
wxzd1232023-02-23 10:28
回复 13楼 吹水佬
版主不是照搬,参考不了,好像有些东西在dll中,这是这行代码中少点什么?
Thisform.Web1.Document.getElementById('button1').?.click
'button1'是网页代码中的id,这个?应该是什么不知道
#16
吹水佬2023-02-23 12:01
以下是引用wxzd123在2023-2-23 10:28:06的发言:

版主不是照搬,参考不了,好像有些东西在dll中,这是这行代码中少点什么?
Thisform.Web1.Document.getElementById('button1').?.click
'button1'是网页代码中的id,这个?应该是什么不知道

示例中的 JS、HTML 代码都是明摆着,与DLL无关。
DLL只是封装了几个WebView2接口的API,他提供的只是一种方法,没有具体内容。

JS、HTML可以照搬。
程序代码:

TEXT TO htmlCode TEXTMERGE NOSHOW PRETEXT 7
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>vfp运行web代码</title>
    <script>
        var e = document.createEvent("MouseEvents");
        e.initEvent("click", true, true);
        
        function test()
        {
            alert("点击了test按键");
        }
    </script>
</head>
<body>
    <pre>
    <h2>vfp运行web代码</h2>
    <button id="vfprun" onclick="test()">test</button>
    </pre>
</body>
</html>
ENDTEXT

of = CREATEOBJECT("form1")
of.show(1)
RETURN

DEFINE CLASS form1 AS Form
    ADD OBJECT cmd AS CommandButton WITH Top=10,Left=10,height=22,Caption = "test"
    ADD OBJECT WB AS Olecontrol WITH Top=40,Left=0,Width=this.width,Height=this.height,;
        OleClass="Shell.Explorer.2",Anchor=15,Visible=.T.

 
    PROCEDURE Init
        this.WB.Silent = .T.
        thisform.WB.Navigate("about:"+htmlCode)
    ENDPROC

    PROCEDURE cmd.Click
        jsCode = [document.getElementById("vfprun").dispatchEvent(e);]  && 执行点击按键
        thisform.WB.document.parentWindow.execScript(jsCode, "JavaScript")
    ENDPROC
ENDDEFINE
#17
schtg2023-02-23 14:55
回复 16楼 吹水佬
OK!
#18
吹水佬2023-02-23 15:04
以下是引用wxzd123在2023-2-23 10:28:06的发言:

这是这行代码中少点什么?
Thisform.Web1.Document.getElementById('button1').?.click
'button1'是网页代码中的id,这个?应该是什么不知道

这个?应该不是什么,或者某些情况是可以 <object>.click 的。

#19
wxzd1232023-02-23 16:11
回复 16楼 吹水佬
谢谢版主
webbrowser不支持这行代码
var e = document.createEvent("MouseEvents");
只有本站会员才能查看附件,请 登录
#20
吹水佬2023-02-23 16:27
人家OK你吾OK,是不是“落后”了。
升级IE内核

#21
wxzd1232023-02-23 16:58
哈哈,落伍了,请问版主有支持低版本的命令代替吗?
#22
吹水佬2023-02-23 17:22
以下是引用wxzd123在2023-2-23 16:58:38的发言:

哈哈,落伍了,请问版主有支持低版本的命令代替吗?

这个与windows版本有关,WIN版本高,IE内核就可以升高。
你用win98的话,<object>.click 可能有效。
#23
wxzd1232023-02-23 18:43
上面是在win7下测试,我又拷贝到win10机器,结果一样
#24
吹水佬2023-02-23 20:02
以下是引用wxzd123在2023-2-23 18:43:19的发言:

上面是在win7下测试,我又拷贝到win10机器,结果一样

win10的可以升级IE内核,本坛也有相关讨论,或者搜索一下。
1