由于我来自Java背景,因此我不是Objective-C专家,因此需要努力修改以下代码:
- (void) loadHTML:(CDVInvokedUrlCommand*)command
{
NSString* callbackId = command.callbackId;
NSArray *arguments = command.arguments;
CDVPluginResult* pluginResult;
if (webView)
{
NSString *stringObtainedFromJavascript = [arguments objectAtIndex:0];
[webView loadHTMLString:stringObtainedFromJavascript baseURL:baseURL];
if (screenNeedsInit) {
[self makeScreenVisible];
}
pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString: WEBVIEW_OK];
[self writeJavascript: [pluginResult toSuccessCallbackString:callbackId]];
}
else
{
pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString: WEBVIEW_UNAVAILABLE];
[self writeJavascript: [pluginResult toErrorCallbackString:callbackId]];
}
}
编译器抱怨{,writeJavascript
和toErrorCallbackString
都已弃用,我应该将其替换为evalJS
和pluginResult
。
所以,我的第一步是改变这一行:
[self writeJavascript: [pluginResult toSuccessCallbackString:callbackId]];
像这样:
[self.commandDelegate evalJs: [pluginResult toSuccessCallbackString:callbackId]];
所以,这很有用,但我仍然需要用toSuccessCallbackString
替换sendPluginResult
,所以我用谷歌搜索了这个:
[self.commandDelegate sendPluginResult:pluginResult callbackId:callbackId];
但是如何将evalJS
与sendPluginResult
结合起来呢?在旧版本中,我认为pluginResult toSuccessCallbackString
只返回NSString*
,但现在sendPluginResult
似乎涉及回调?如何管理此操作以将sendPluginResult
的结果传递给evalJS
。
注意:我正在使用cordova api。
请保持温和,我还没有写过很多Objective-C而且我在语法方面很难。
答案 0 :(得分:11)
使用此:
[self.commandDelegate sendPluginResult:pluginResult callbackId:callbackId];
如果您在pluginResult上使用CDVCommandStatus_OK
,那么它将调用成功回调,如果您使用CDVCommandStatus_ERROR
则会调用错误回调
你的javascript应该是这样的:
cordova.exec(successCallback, errorCallback, "YourPluginName", "loadHTML",["yourHtmlString"]);