Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在ios 8中将数据传递到webview_Javascript_Objective C_Uiwebview_Ios8 - Fatal编程技术网

Javascript 在ios 8中将数据传递到webview

Javascript 在ios 8中将数据传递到webview,javascript,objective-c,uiwebview,ios8,Javascript,Objective C,Uiwebview,Ios8,我有一个应用程序,可以在中加载web。我需要在uiwebview和web loaded之间进行通信,反之亦然 我的应用程序在早期的ios(如ios 7.x、6.x和5.x)中运行正常,但现在我尝试了ios 8,但它不起作用。我可以将信息从objective c发送到javascript(使用stringByEvaluatingJavaScriptFromString:),但我无法从javascript接收信息 对于这一点,我使用了相同的方法,如下所述:。我的意思是,我实施: - (BOOL)we

我有一个应用程序,可以在中加载web。我需要在uiwebview和web loaded之间进行通信,反之亦然

我的应用程序在早期的ios(如ios 7.x、6.x和5.x)中运行正常,但现在我尝试了ios 8,但它不起作用。我可以将信息从objective c发送到javascript(使用stringByEvaluatingJavaScriptFromString:),但我无法从javascript接收信息

对于这一点,我使用了相同的方法,如下所述:。我的意思是,我实施:

- (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 我总是收到大约:空白

我知道ios 8中的UIWebView已经改变,但我想保持与早期版本的兼容性。 你知道在ios 8中是否可以做到这一点吗?最好的方法是什么


多谢各位

我也有这个问题。据我所知,它看起来像是在iOS 8的UIWebViewDelegate中更改
窗口.location.href
不再触发
webView:shouldStartLoadWithRequest:navigationType:

我发现了另一种方法:

基本上,您应该创建一个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以解决问题:这比我预期的工作量要少。为了向后兼容,我有条件地将较旧的视图控制器与UIWebView一起使用。

我使用了SeanR方法,这很有效


无论如何,在frame:MyObjectiveFunction之后有一个小的语法错误需要修复,一个缺失的语法错误。

我希望将WebViewJavascriptBridge移植到ios8的时间足够快……这对我来说也很有效。请确保修复原始代码作者的打字错误,并在第二行末尾添加一个结束符
,以关闭
setAttribute
方法。谢谢@CliftonLabrum,打字错误修复我和您一样使用与IFRAME完全相同的过程,但在委托中未收到任何通知。有什么想法吗?当站点第一次加载时,应该调用
shouldStartLoadWithRequest
以防有人想将参数发送到objective c函数,不要使用:将它们分开,然后调用类似
js frame:myObjectiveFunction#parameter
的东西。我收到了关于:blank的消息,因为我使用了:parameterThank@salvabalza,拼写错误已修复