如何从 cocoa 中的 javascript 调用 objective c 代码
How to call a objective c code from javascript in cocoa
现在我的 javascript 看起来像这样:
testStackData.addOrUpdateHeader("username", "vikas test", 1);
testStackData.addOrUpdateHeader("testHeader", testStackData.priorResults.responseBody.cars[0].name, 1);
testStackData.addOrUpdateVariable("carNameTest", "variable updated from pre script", 1);
testStackData.stepError.haveError = false;
return testStackData
现在我需要创建一个 Objective-C 函数 addOrUpdateHeader
或 addOrUpdateVariable
,如 javascript 中所述。
但是我很困惑如何调用这些函数。
在 Javascript 核心框架的帮助下,我终于得到了我的 javascript 代码 运行 我的应用程序。
我创建了 json 字符串,并在字符串本身中嵌入了 javascript 函数。由于javascript在其定义中丢失,它允许有效地调用和执行函数。
转到代码,我为 addOrUpdateHeader 创建了单独的函数
addOrUpdateVariable
函数如下:
"addOrUpdateHeader" :
function(headerName, headerValue, trackHistory){
if(this.projectServers.projectServerDefaultHeaders.length>0) {
var index ;
var isHeaderNameExists = false;
for(var h =0; h<this.projectServers.projectServerDefaultHeaders.length;h++) {
if(this.projectServers.projectServerDefaultHeaders[h].headerName === headerName) {
index=h;
isHeaderNameExists = true;
break;
} }
if(isHeaderNameExists) {
this.projectServers.projectServerDefaultHeaders[index].headerValue = headerValue;
}
else {
this.projectServers.projectServerDefaultHeaders.push({
headerName : headerName,
headerValue : headerValue,
projectServerDefaultHeaderId : '',
trackHistory : trackHistory
});
} } },
"addOrUpdateVariable" : function(variableName, variableValue){
if(this.projectServers.projectServerDefaultVariables.length>0) {
var index ;
var isVariableNameExists = false;
for(var v =0; v<this.projectServers.projectServerDefaultVariables.length;v++) {
if(this.projectServers.projectServerDefaultVariables[v].variableName === variableName) {
index=v;
isVariableNameExists = true;
break;
} }
if(isVariableNameExists) {
this.projectServers.projectServerDefaultVariables[index].variableValue = variableValue;
}
else {
this.projectServers.projectServerDefaultVariables.push({
variableName : variableName,
variableValue : variableValue,
projectServerDefaultVariableId : ''
});
}}
}
然后使用 javascript 核心框架的 JSContext 在以下代码的帮助下完成所需的功能
JSContext *context = [[JSContext alloc] init];
context.exceptionHandler = ^(JSContext *context, JSValue *exception) {
NSLog(@"[%@:%@:%@] %@\n%@", exception[@"sourceURL"], exception[@"line"], exception[@"column"], exception, [exception[@"stack"] toObject]);
};
[context evaluateScript:testStackData];
NSString * jsCode = [NSString stringWithFormat:@"var prescript = function (testStackData) {%@}",script];
[context evaluateScript:jsCode];
JSValue * ret = [context evaluateScript:@"prescript(testStackData);"];
这里的 testStackData 是我的 json 字符串
现在我的 javascript 看起来像这样:
testStackData.addOrUpdateHeader("username", "vikas test", 1);
testStackData.addOrUpdateHeader("testHeader", testStackData.priorResults.responseBody.cars[0].name, 1);
testStackData.addOrUpdateVariable("carNameTest", "variable updated from pre script", 1);
testStackData.stepError.haveError = false;
return testStackData
现在我需要创建一个 Objective-C 函数 addOrUpdateHeader
或 addOrUpdateVariable
,如 javascript 中所述。
但是我很困惑如何调用这些函数。
在 Javascript 核心框架的帮助下,我终于得到了我的 javascript 代码 运行 我的应用程序。
我创建了 json 字符串,并在字符串本身中嵌入了 javascript 函数。由于javascript在其定义中丢失,它允许有效地调用和执行函数。
转到代码,我为 addOrUpdateHeader 创建了单独的函数 addOrUpdateVariable
函数如下:
"addOrUpdateHeader" :
function(headerName, headerValue, trackHistory){
if(this.projectServers.projectServerDefaultHeaders.length>0) {
var index ;
var isHeaderNameExists = false;
for(var h =0; h<this.projectServers.projectServerDefaultHeaders.length;h++) {
if(this.projectServers.projectServerDefaultHeaders[h].headerName === headerName) {
index=h;
isHeaderNameExists = true;
break;
} }
if(isHeaderNameExists) {
this.projectServers.projectServerDefaultHeaders[index].headerValue = headerValue;
}
else {
this.projectServers.projectServerDefaultHeaders.push({
headerName : headerName,
headerValue : headerValue,
projectServerDefaultHeaderId : '',
trackHistory : trackHistory
});
} } },
"addOrUpdateVariable" : function(variableName, variableValue){
if(this.projectServers.projectServerDefaultVariables.length>0) {
var index ;
var isVariableNameExists = false;
for(var v =0; v<this.projectServers.projectServerDefaultVariables.length;v++) {
if(this.projectServers.projectServerDefaultVariables[v].variableName === variableName) {
index=v;
isVariableNameExists = true;
break;
} }
if(isVariableNameExists) {
this.projectServers.projectServerDefaultVariables[index].variableValue = variableValue;
}
else {
this.projectServers.projectServerDefaultVariables.push({
variableName : variableName,
variableValue : variableValue,
projectServerDefaultVariableId : ''
});
}}
}
然后使用 javascript 核心框架的 JSContext 在以下代码的帮助下完成所需的功能
JSContext *context = [[JSContext alloc] init];
context.exceptionHandler = ^(JSContext *context, JSValue *exception) {
NSLog(@"[%@:%@:%@] %@\n%@", exception[@"sourceURL"], exception[@"line"], exception[@"column"], exception, [exception[@"stack"] toObject]);
};
[context evaluateScript:testStackData];
NSString * jsCode = [NSString stringWithFormat:@"var prescript = function (testStackData) {%@}",script];
[context evaluateScript:jsCode];
JSValue * ret = [context evaluateScript:@"prescript(testStackData);"];
这里的 testStackData 是我的 json 字符串