将数据传递到ios 8中的webview

A.V*_*ila 4 javascript objective-c uiwebview ios8

我有一个在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;
}
Run Code Online (Sandbox Code Playgroud)

当我发送:newprotocol:// xxxxx我总是收到:空白

我知道在ios 8中UIWebView发生了变化,但我想保持与早期版本的兼容性.你知道在ios 8中是否可以这样做吗?做这个的最好方式是什么?

非常感谢你!

Sea*_*anR 6

我也有这个问题.据我所知,它似乎改变了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;
Run Code Online (Sandbox Code Playgroud)

编辑:我仍然看到这个方法的奇怪问题,所以如果你使用它,YMMV.我最终将我的UIWebViews迁移到WKWebViews来解决问题:它比我预期的要少.我有条件地使用带有UIWebViews的旧视图控制器来向后兼容.