原生APP给H5传值,可否通过window方式传给H5?

有这么个场景,APP端通过webview方式嵌入的H5页面,在APP端完成登录后,需要将用户信息userInfo传递给需要打开的H5页面,目前APP端的做法是将userInfo绑定到window对象上,H5页面加载后通过window.userInfo直接取用。
那么问题是:
1.会不会出现APP端的window注入发生在H5页面加载完成之后,导致H5页面代码走到取用window.userInfo时出现undefined?
2.这种APP给H5传递数据,比较好的做法是什么?不会出现H5页面加载完后还取不到app传递的数据这种情况。


回答:

所以为什么不把token放到打开的url上面呢? H5页面获取页面 query 信息里面的 token 然后在和后端换取用户信息就可以了呀?


回答:

问题1:在取window.userInfo是否undefined,得具体看你是在什么阶段进行获取的。可以添加获取失败的处理逻辑。
我觉得更好的方式可以,在通过webview打开H5之前,对H5链接进行处理,加用户的id或者token携带到链接上,在H5获取到链接参数后请求后端获取userInfo的信息。


回答:

提供一个路子你给iOS开发瞅瞅,安卓应该有类型的API:

WKUserContentController* userContentController =[[WKUserContentController alloc]init];

//注册message

[userContentController addScriptMessageHandler:self name:@"MSInfo"];

WKWebViewConfiguration * configuration = [[WKWebViewConfiguration alloc]init];

configuration.userContentController = userContentController;

configuration.preferences.javaScriptEnabled = YES;

WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, 300, 500) configuration:configuration];

//前端通过这种方法发消息

//window.webkit.messageHandlers.iOSIOV.postMessage(['MSInfo','{key:value}'])

//接受从前端收到的消息

- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {

if ([message.name isEqualToString:@"MSInfo"]) {

NSString *para = @"{}";

//调用前端方法传值

[message.webView evaluateJavaScript:@"JSCallBack(%@);",para] completionHandler:^(id _Nullable dic, NSError * _Nullable error) {

}];

}

}

}

}


回答:

如果你的userInfo信息是本地注入,肯定会发生在H5加载完之前吧。

此外,你可以在H5中检测并计数window.userInfo获取失败的情况,在失败时进入特殊处理流程,比如延迟刷新计数,失败到一定次数后提示报告等等。

以上是 原生APP给H5传值,可否通过window方式传给H5? 的全部内容, 来源链接: utcz.com/p/932895.html

回到顶部