| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 527 人关注过本帖
标题:MinibLink 如何接收 runJs运行后的返回值?
只看楼主 加入收藏
easyppt
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:302
专家分:701
注 册:2021-11-24
结帖率:100%
收藏
 问题点数:0 回复次数:10 
MinibLink 如何接收 runJs运行后的返回值?
MinibLink 如何接收 runJs运行后的返回值?

API文档地址:https://
帮助文档说:jsValue是个封装了内部v8各种类型的类。

我简单的写了3条语句,但结果不对,供参考:

lnResult = wkeRunJS(Thisform.SBG,jsString)
es = wkeGlobalExec(Thisform.SBG)
lctext = jsToTempString(es,lnResult)
搜索更多相关主题的帖子: 运行 接收 文档 返回值 Thisform 
2024-07-30 09:26
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
有一个C的示例,或者可以参考一下。
C与JavaScript互相调用

C++调用JavaScript
和wke一样,wkexe也可以通过相同的wkeRunJS函数调用JavaScript代码,
但不同的是,如果C++代码想要获得JavaScript的返回值,需要在调用的JS代码前加上return:

jsRet = wkeRunJS(gWkeWebView, "return funcforcplusplus(\"\xe4\xbd\xa0\xe5\xa5\xbd ABCDEFG\")");
jsRetStr = jsToStringW(wkeGlobalExec(gWkeWebView), jsRet);
MessageBox(hWnd, jsRetStr, L"runJS返回", 0);

JavaScript调用C++
同wke一样,JS调用C++代码也需要绑定,在RunApplication函数中CreateWebWindow之前添加如下代码:

jsBindFunction("msgBox", js_msgBox, 2);//JS调用C++

同时在app.cpp文件中添加:

//JS调用C++
jsValue JS_CALL js_msgBox(jsExecState es)
{
    const wchar_t* text = jsToStringW(es, jsArg(es, 0));
    const wchar_t* title = jsToStringW(es, jsArg(es, 1));
    MessageBox(NULL, text, title, 0);
    return jsStringW(es, L"C++返回字符串");
}

前端测试用的HTML代码如下:

<!DOCTYPE html>
<html xmlns="http://www.
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>WKE Test Web Page</title>
<script>
function funcforcplusplus(instr){
    document.getElementById('result').value=instr;
    return navigator.userAgent;
    //return "JavaScript Return 返回啦";
}
</script>
</head>
<body>
<p>WKE Test Web Page</p>
<a href='#' onclick="document.getElementById('result').value=msgBox('TEST Function from JS to Cpp','来自Javascript的调用');">LINK</a>
<textarea rows='6' cols='36' id='result'>hello</textarea>
</body>
</html>


2024-07-30 14:05
easyppt
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:302
专家分:701
注 册:2021-11-24
收藏
得分:0 
谢谢吹版,尝试转换为VFP代码,都没成功,感觉它返回的应该不是一个内存地址或者字符串常量,实在能力有限。

2024-07-31 08:14
iswith
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:448
专家分:582
注 册:2013-5-14
收藏
得分:0 
问问作者不就可以啦,昨天还跟他聊着呢!!!
2024-07-31 10:53
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用easyppt在2024-7-31 08:14:36的发言:

谢谢吹版,尝试转换为VFP代码,都没成功,感觉它返回的应该不是一个内存地址或者字符串常量,实在能力有限。

简单试了一下,是有点问题。
第一次获取的是空值,再次就是正常返回值。
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

程序代码:
函数声明
DECLARE LONG wkeRunJS      IN node LONG,STRING@
DECLARE LONG jsToString    IN node LONG,LONG
DECLARE LONG wkeGlobalExec IN node LONG


测试代码
    PROCEDURE test.click
        IF "" == this.Tag
            this.Tag = "1"
            wkeLoadFile(gWkeWebView, "test_js.html")
            RETURN 
        ENDIF
        jsRet    = wkeRunJS(gWkeWebView, "return test()")
        jsRetStr = jsToString(wkeGlobalExec(gWkeWebView), jsRet)
        ret = SYS(2600,jsRetStr,32) && 长度要足够大
        ret = STRCONV(ret,11)
        ret = LEFT(ret, AT(0h00,ret)-1)
        MESSAGEBOX(ret)
    ENDPROC


前端测试用的HTML代码 test_js.html
<html>
<head>
<script> 
function test()
{
    return "JavaScript Return 返回啦";
}   
</script>
</head>
<body>
<div class="demo1">
  <p>VFP调用JavaScript代码并获得JavaScript的返回值
</div>
</body>
</html>




2024-08-01 20:52
easyppt
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:302
专家分:701
注 册:2021-11-24
收藏
得分:0 
吹版让我更加喜爱VFP

我测试了几次,返回还是空,难道是我的node.dll版本不对吗

这个 MinibLink 好像还有一个强大的功能,就是发送键盘鼠标动作,不知道利用这个函数能否实现自动填表。
现在网页大多都是VUE方式, document.getElementById 基本上都无法实现填表了。
我找找相关的函数,但实现估计还得指望吹版




[此贴子已经被作者于2024-8-1 21:56编辑过]

2024-08-01 21:34
iswith
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:448
专家分:582
注 册:2013-5-14
收藏
得分:0 
VUE就不可以,document.getElementById不是吧。。。。。
2024-08-02 21:29
pnyjq
Rank: 2
等 级:论坛游民
帖 子:22
专家分:74
注 册:2021-7-14
收藏
得分:0 
VUE控件不喜欢用ID
2024-08-03 07:37
pnyjq
Rank: 2
等 级:论坛游民
帖 子:22
专家分:74
注 册:2021-7-14
收藏
得分:0 
人家本来就想灭掉dom的
2024-08-03 07:38
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用easyppt在2024-8-1 21:34:02的发言:

吹版让我更加喜爱VFP

我测试了几次,返回还是空,难道是我的node.dll版本不对吗


很久没关注miniblink了,看了一下最新的是20231115,已经将node.dll和mb.dll合并为一个dll,初始化好像有点不同。
我测试用的是20220903版本,开始先调用一次jsToString()就可以获取正常返回值。
        jsRet = wkeRunJS(gWkeWebView, "return test()")
        es = wkeGlobalExec(gWkeWebView)
        jsToString(es, 0)
        jsRetStr = jsToString(es, jsRet)

[此贴子已经被作者于2024-8-3 11:58编辑过]

2024-08-03 11:57
快速回复:MinibLink 如何接收 runJs运行后的返回值?
数据加载中...
 
   



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

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