标题:WebBrowser 调用带参数的JS函数
只看楼主
eepcvfp
Rank: 2
等 级:论坛游民
帖 子:166
专家分:15
注 册:2013-8-12
结帖率:87.5%
已结贴  问题点数:20 回复次数:5 
WebBrowser 调用带参数的JS函数
各位老师:
       最近我在尝试通过WebBrowser控件调用JS函数,遇到如下问题:
       假如有一个Html文件,内容如下:
程序代码:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>
<body>
<script type="text/javascript">
    function test1() {
        return "测试一";
    }
     function test2(aaa) {
        alert(aaa);
    }
</script>
</body>
</html>


在VFP9.0里,通过WebBrowser调用不带参数的JS函数可以实现:
thisform.WebBrowser.Object.Document.ParentWindow.ExecScript('var cReturn = test1()')
a = thisform.WebBrowser.Object.Document.Script.cReturn
=MESSAGEBOX(a)  && 这时能正确取得JS函数返回的值“测试一”


请问如果实现调用带参数的JS函数,比如:我想在调用test2(aaa)时,将VFP的变量传递给这个JS函数,应该如何完成呢?
搜索更多相关主题的帖子: WebBrowser 调用 参数 JS 函数 
2018-04-21 21:04
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:20 
of = CREATEOBJECT("form1")
of.show(1)

DEFINE CLASS form1 as Form
    ADD OBJECT WB AS WebBrowser WITH Width=this.Width,Height=this.Height
    PROCEDURE Activate
        TEXT TO szHTML NOSHOW
            <html>
            <head>
            <script>
            var str = "Hello";
            function _Test(aaa)
            {
                //alert("WebBrowser调用JavaScript函数");
                return aaa;
            }
            </script>
            </head>
            </html>
        ENDTEXT
        thisform.WB.Navigate("about:blank")
        thisform.WB.Document.Writeln(szHTML)
        MESSAGEBOX(thisform.WB.document.parentWindow.str)
        s = "Hello, World!"
        thisform.WB.document.parentWindow.execScript("str = _Test('"+s+"')", "JavaScript")
        MESSAGEBOX(thisform.WB.document.parentWindow.str)
    ENDPROC
ENDDEFINE

DEFINE CLASS WebBrowser AS Olecontrol
    OleClass = "Shell.Explorer.2"
    Anchor = 15
    Visible = .T.
ENDDEFINE
2018-04-22 06:24
eepcvfp
Rank: 2
等 级:论坛游民
帖 子:166
专家分:15
注 册:2013-8-12
得分:0 
感谢吹版多次相助!!

thisform.WB.document.parentWindow.execScript("str = _Test('" + s + "')", "JavaScript")

小弟愚笨,为什么参数要用这种组合字符串的方式呢?能不能请吹版略加解释?
2018-04-22 08:17
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用eepcvfp在2018-4-22 08:17:03的发言:

感谢吹版多次相助!!

thisform.WB.document.parentWindow.execScript("str = _Test('" + s + "')", "JavaScript")

小弟愚笨,为什么参数要用这种组合字符串的方式呢?能不能请吹版略加解释?

execScript方法的输入参数是字符串表达式,有点象VFP的EXECSCRIPT()函数。
2018-04-22 08:56
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
对比一下看看:
n = 123
s = "ABC"
EXECSCRIPT("MESSAGEBOX("+TRANSFORM(n)+")")
EXECSCRIPT("MESSAGEBOX('"+s+"')")
EXECSCRIPT("MESSAGEBOX(n)")
EXECSCRIPT("MESSAGEBOX(s)")


[此贴子已经被作者于2018-4-22 09:01编辑过]

2018-04-22 08:59
eepcvfp
Rank: 2
等 级:论坛游民
帖 子:166
专家分:15
注 册:2013-8-12
得分:0 
明白了。
再次感谢吹版,古道热肠,热心相助。
2018-04-22 09:10



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-486261-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.460787 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved