在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Delphi与JS的交互问题:
尊重原创,转载请注明出处,原文地址: http://blog.csdn.net/xtfnpgy/article/details/46635871 一、执行简单的JS 上一篇已经讲过: chrm1.browser.MainFrame.ExecuteJavaScript('alert("abc");','about:blank',0); 二、注入自定义的JS 首先必须在网页加载完成之后,才可以执行,不能为空页面! str_js := 'var oScript = document.createElement( "script" );oScript.id = "sid";alert(oScript.id);'; 三、delphi与JS交互(通过ceflib实现) Cef3的Demo里面,有一个cefclient的例子,可以看下,关键代码: TExtension = class(TCefv8HandlerOwn) procedure RegisterExtension; 在FormCreate中注册类: 调用实例: chrm1.browser.MainFrame.ExecuteJavaScript('alert("abc");','about:blank',0);
str_temp := 'function aaa(){var CefObj = new cef.taobao.test_object;'+ //先new一个实例对象
'CefObj.SetTestParam("abc");var b=CefObj.GetTestParam();alert(b);'+ //设置、获取、输出参数 '}aaa();'; chrm1.Browser.MainFrame.ExecuteJavaScript(str_temp,'about:blank',0); 如果要实现多个参数,可以定义个数组替代FTestParam
private
FTestParam : ustring; ArrayParam : array of ustring; //多个参数 关键代码:
if(name = 'SetTestParam') then
begin // **************原来一个参数的情况********** // if (Length(arguments) <> 1) or (not arguments[0].IsString) then // begin // Result := false; // Exit; // end; // FTestParam := arguments[0].GetStringValue; // **************原来一个参数的情况********** SetLength(ArrayParam,Length(arguments)); for i := 0 to Length(arguments) - 1 do begin ArrayParam[i] := arguments[i].GetStringValue; if s='' then s := ArrayParam[i] else s := s+','+ArrayParam[i]; end; FTestParam := s; end else if(name = 'GetTestParam') then begin // **************原来一个参数的情况********** // retval := TCefv8ValueRef.CreateString(FTestParam); // **************原来一个参数的情况********** for i := 0 to Length(ArrayParam) - 1 do begin if s='' then s := ArrayParam[i] else s := s+','+ArrayParam[i]; end; retval := TCefv8ValueRef.CreateString(FTestParam); end; 这样调用GetTestParam返回的还是一个字符串,多个参数用逗号隔开了而已,可以对其再进行改写即可;
尊重原创,转载请注明出处,原文地址: http://blog.csdn.net/xtfnpgy/article/details/46635871 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论