关于TChrome中加载JS与delphi交互问题回复liqiao的提问Word格式.docx

上传人:b****2 文档编号:15282966 上传时间:2022-10-29 格式:DOCX 页数:16 大小:17.68KB
下载 相关 举报
关于TChrome中加载JS与delphi交互问题回复liqiao的提问Word格式.docx_第1页
第1页 / 共16页
关于TChrome中加载JS与delphi交互问题回复liqiao的提问Word格式.docx_第2页
第2页 / 共16页
关于TChrome中加载JS与delphi交互问题回复liqiao的提问Word格式.docx_第3页
第3页 / 共16页
关于TChrome中加载JS与delphi交互问题回复liqiao的提问Word格式.docx_第4页
第4页 / 共16页
关于TChrome中加载JS与delphi交互问题回复liqiao的提问Word格式.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

关于TChrome中加载JS与delphi交互问题回复liqiao的提问Word格式.docx

《关于TChrome中加载JS与delphi交互问题回复liqiao的提问Word格式.docx》由会员分享,可在线阅读,更多相关《关于TChrome中加载JS与delphi交互问题回复liqiao的提问Word格式.docx(16页珍藏版)》请在冰豆网上搜索。

关于TChrome中加载JS与delphi交互问题回复liqiao的提问Word格式.docx

SysUtils,Classes,ceflib,Rtti,cefvcl;

const

csErrorParameters='

ErrorParameters'

;

csHaveNoThisMember='

Havenomember'

csChromiumCouldNotBeNil='

Chromiumcouldnotbenil,pleasefirstsettheChromiumproperty'

type

{}

TVCLJsExtended=class(TComponent)

type

TANameType=(ntMethod,ntField,ntProperty);

{Innerclass}

TNCJSHandle=class(TCefv8HandlerOwn)

private

FContainer:

TVCLJsExtended;

protected

functionExecute(constname:

ustring;

constobj:

ICefv8Value;

constarguments:

TCefv8ValueArray;

varretval:

varexception:

ustring):

Boolean;

override;

procedureJsCallMethod(Method:

TRttiMethod;

outReturnVal:

ICefv8Value;

constParam:

TCefv8ValueArray);

overload;

ICefv8Value);

functionMethodParamLength(Mn:

string):

Integer;

public

constructorCreate(Container:

TVCLJsExtended);

end;

FProcessObject:

TObject;

FJsHandle:

TNCJSHandle;

FTypeInfo:

Pointer;

FCustomChromium:

TChromium;

FFrame:

ICefFrame;

Frame:

ICefFrame{readFFramewriteFFrame};

propertyProcessObject:

TObjectreadFProcessObject;

propertyATypeInfo:

PointerreadFTypeInfo;

procedureSetProcessObject(value:

ATypeInfo:

Pointer);

ProcedureExecuteJavaScript(constjsCode,scriptUrl:

string;

startLine:

Integer);

ProcedureExecuteJavaScript(constjsCode:

string);

constructorcreate(AOwner:

TComponent);

override;

propertyChromium:

TChromiumreadFCustomChromiumwriteFCustomChromium;

TVCLNcJsExtended=class(TVCLJsExtended)

published

propertyChromium;

TNCWebBrowser=class(TChromium)

 

procedureRegister;

implementation

usesTypInfo;

begin

RegisterComponents('

NwControls'

[TVCLNcJsExtended]);

[TChromium]);

end;

{TVCLJsExtended}

constructorTVCLJsExtended.create(AOwner:

inheritedcreate(AOwner);

=nil;

=TNCJSHandle.Create(Self);

procedureTVCLJsExtended.ExecuteJavaScript(constjsCode,scriptUrl:

ifnotAssigned(FCustomChromium)then

begin

raiseException.Create(csChromiumCouldNotBeNil);

Exit;

FCustomChromium.Browser.MainFrame.ExecuteJavaScript(jsCode,scriptUrl,startLine);

procedureTVCLJsExtended.ExecuteJavaScript(constjsCode:

ExecuteJavaScript(jsCode,'

'

0);

procedureTVCLJsExtended.SetProcessObject(value:

TObject;

var

RttiContext:

TRttiContext;

RttiType:

TRttiType;

RM:

RP:

TRttiProperty;

RF:

TRttiField;

JsStr,name:

String;

I:

{

根据object所提供的方法属性生成js字符串,希望注册.

}

=value;

=ATypeInfo;

=RttiContext.GetType(FTypeInfo);

name:

=RttiType.Name;

JsStr:

=Format('

var%s;

[name]);

%sif(!

%s)%s={};

[JsStr,name,name]);

{Processmethod}

forRMinRttiType.GetMethodsdo

=JsStr+Format(#$A#$D'

nativefunction%s('

[RM.Name]);

ifLength(RM.GetParameters)=0then

%s);

[JsStr])

else

forI:

=0toLength(RM.GetParameters)-2do

%s%s,'

[JsStr,chr(ord('

A'

)+I)]);

=Length(RM.GetParameters)-1;

%s%s);

{ProcessField}

forRFinRttiType.GetFieldsdo

%s'

#$A#$D'

var%s;

[JsStr,RF.Name]);

caseRF.FieldType.TypeKindof

tkUnknown:

;

tkInteger:

%s=%d;

[JsStr,RF.Name,RF.GetValue(FProcessObject).AsInteger]);

tkChar:

%s="

%s"

[JsStr,RF.Name,RF.GetValue(FProcessObject).AsString]);

tkEnumeration:

tkFloat:

%s=%f;

[JsStr,RF.Name,RF.GetValue(FProcessObject).AsExtended]);

tkString:

tkSet:

tkClass:

{supportlater}JsStr:

%s={};

tkMethod:

tkWChar:

tkLString:

tkWString:

tkVariant:

tkArray:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1