如何替换 Objective-C 中已弃用的方法 toSuccessCallbackString 和 writeJavascript?
How do I replace the deprecated methods toSuccessCallbackString and writeJavascript in Objective-C?
由于我来自 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]];
所以,这有效,但我仍然需要用 sendPluginResult
替换 toSuccessCallbackString
,所以我用谷歌搜索了这个:
[self.commandDelegate sendPluginResult:pluginResult callbackId:callbackId];
但是现在如何将 evalJS
与 sendPluginResult
结合起来呢?在我看来,在旧版本中,pluginResult toSuccessCallbackString
只是返回了一个 NSString*
,但现在 sendPluginResult
似乎涉及回调?我如何管理它以将 sendPluginResult
的结果传递给 evalJS
.
注意:我正在为此使用 cordova api。
请客气点,我写得不多Objective-C,我还在纠结语法。
使用这个:
[self.commandDelegate sendPluginResult:pluginResult callbackId:callbackId];
如果你在pluginResult上使用CDVCommandStatus_OK
,那么它会调用成功回调,如果你使用CDVCommandStatus_ERROR
,那么它会调用错误回调
你的 javascript 应该是这样的:
cordova.exec(successCallback, errorCallback, "YourPluginName", "loadHTML",["yourHtmlString"]);
由于我来自 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]];
所以,这有效,但我仍然需要用 sendPluginResult
替换 toSuccessCallbackString
,所以我用谷歌搜索了这个:
[self.commandDelegate sendPluginResult:pluginResult callbackId:callbackId];
但是现在如何将 evalJS
与 sendPluginResult
结合起来呢?在我看来,在旧版本中,pluginResult toSuccessCallbackString
只是返回了一个 NSString*
,但现在 sendPluginResult
似乎涉及回调?我如何管理它以将 sendPluginResult
的结果传递给 evalJS
.
注意:我正在为此使用 cordova api。
请客气点,我写得不多Objective-C,我还在纠结语法。
使用这个:
[self.commandDelegate sendPluginResult:pluginResult callbackId:callbackId];
如果你在pluginResult上使用CDVCommandStatus_OK
,那么它会调用成功回调,如果你使用CDVCommandStatus_ERROR
,那么它会调用错误回调
你的 javascript 应该是这样的:
cordova.exec(successCallback, errorCallback, "YourPluginName", "loadHTML",["yourHtmlString"]);