原生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