我有一个在uiwebview组件中加载Web的应用程序。我需要在uiwebview和加载的Web之间进行通信,反之亦然。
我的应用程序在较早的ios(例如ios 7.x,6.x和5.x)中可以正常工作,但是现在我尝试使用ios 8,但它不起作用。我可以将信息从目标c发送到javascript(使用stringByEvaluatingJavaScriptFromString :),但是我无法从javascript接收信息。
为此,我使用了与此处说明相同的方法:ios将值传递给本机应用程序。我的意思是,我实现了:
- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
NSLog(@"URL: %@", [request URL]);
NSURL *URL = [request URL];
if ([[URL scheme] isEqualToString:@"newprotocol"]) {
// something
return NO;
}
return YES;
}
当我发送:newprotocol:// xxxxx时,我总是收到about:blank
我知道UIWebView在ios 8中已更改,但我想保持与早期版本的兼容性。您知道是否可以在ios 8中执行此操作吗?做这个的最好方式是什么?
非常感谢你!
我也有这个问题。据我所知,它看起来像更改了iOS 8中的UIWebViewDelegate中的window.location.href
不再触发webView:shouldStartLoadWithRequest:navigationType:
。
我发现了这种替代方法:http : //blog.techno-barje.fr//post/2010/10/06/UIWebView-secrets-part3-How-to-properly-call-ObjectiveC-from-Javascript/
本质上,您应该创建一个IFrame并设置其位置以触发委托方法:
var iframe = document.createElement("IFRAME");
iframe.setAttribute("src", "js-frame:myObjectiveCFunction");
document.documentElement.appendChild(iframe);
iframe.parentNode.removeChild(iframe);
iframe = null;
编辑:我仍然看到这种方法的奇怪的问题,因此,如果您使用它,YMMV。我最终将UIWebViews迁移到WKWebViews来解决问题:这比我期望的要少。我有条件地将旧的视图控制器与UIWebViews一起使用,以实现向后兼容。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句