iOS_WKWebView_Interaction entre native et JS_Vous pouvez obtenir immédiatement la valeur de retour native

  1. WKWebViewLe système est livré avec la API
    référence: https://blog.csdn.net/baihuaxiu123/article/details/51286109
  2. Utilisez un framework tiers WebViewJavascriptBridge, il y a une introduction détaillée à l'utilisation dans le
    lien WebViewJavascriptBridge
  3. Les méthodes d'interaction ci-dessus sont asynchrones et la JSvaleur de retour native ne peut pas être obtenue immédiatement. Présentez maintenant comment obtenir immédiatement la valeur de retour native
    3.1 et suivez le protocole correspondant
        _webView.UIDelegate = self;

3.2. Mettre en œuvre le contenu de l'accord

- (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(nullable NSString *)defaultText initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSString * __nullable result))completionHandler {
    NSError *err = nil;
    NSData *dataFromString = [prompt dataUsingEncoding:NSUTF8StringEncoding];
    NSDictionary *payload = [NSJSONSerialization JSONObjectWithData:dataFromString options:NSJSONReadingMutableContainers error:&err];
    if (!err){
        NSString *type = [payload objectForKey:@"type"];
        if (type && [type isEqualToString:@"JSbridge"]){
            completionHandler([self getReturnValueWithPayload:payload]);
        }
    }
}
// 自定义方法
- (NSString *)getReturnValueWithPayload:(NSDictionary *)payload{
    NSString *returnValue = @"";
    NSString *functionName = [payload objectForKey:@"functionName"];
    NSDictionary *args = [payload objectForKey:@"arguments"]; // JS传入的值
    if ([functionName isEqualToString:@"getUserData"]) {
        NSDictionary *dictionary = @{@"userCode":@"1231231231" };
        returnValue = [self toJsonWithDictionary:dictionary];
    }
    return returnValue;
}
// 字典转化为JSON字符串
- (NSString *)toJsonWithDictionary:(NSDictionary *)dict{
    if (dict == nil || dict.allKeys.count == 0) {
        return @"";
    }else{
        NSError *parseError = nil;
        NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&parseError];
        return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
    }
}

3.3, JSappelez la méthode native

// 声明
function getNativeDataFunction(functionName,parm = {}){
    var payload = {"type": "JSbridge", "functionName": functionName, "arguments": parm};
    return prompt(JSON.stringify(payload));
}
// 调用 nativeData即接收的返回值<JSON字符串>
var  nativeData =  getNativeDataFunction("getUserData");

Je suppose que tu aimes

Origine blog.csdn.net/FlyingKuiKui/article/details/98619845
conseillé
Classement