UIWebView回调到C/Objective-C中的Javascript
当在UIWebView中检测到某个事件时,是否有方法获得对objective-c的回调?Javascript可以向Objective-C发送回调吗?更新-不再使用UIWebView。使用WKWebView,或者更好(如果它适合您的需要并且您正在为iOS 9构建),Safari视图控制器 但如果必须使用UIWebView,请在UIWebView委托中为UIWebView回调到C/Objective-C中的Javascript,javascript,objective-c,ios,cocoa-touch,uiwebview,Javascript,Objective C,Ios,Cocoa Touch,Uiwebview,当在UIWebView中检测到某个事件时,是否有方法获得对objective-c的回调?Javascript可以向Objective-C发送回调吗?更新-不再使用UIWebView。使用WKWebView,或者更好(如果它适合您的需要并且您正在为iOS 9构建),Safari视图控制器 但如果必须使用UIWebView,请在UIWebView委托中为 在HTML或Javascript文件中,添加将URL发送到自定义方案的函数(出于可读性目的,不需要自定义方案)。发送的所有URL都将传递给Obje
在HTML或Javascript文件中,添加将URL发送到自定义方案的函数(出于可读性目的,不需要自定义方案)。发送的所有URL都将传递给Objective-C方法实现,然后您可以执行自己喜欢的操作。仅用“bpapa”和实际代码来说明解决方案: 警告:未测试的代码 在UIWebView的委托中实现此方法
-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType {
if ( [[[inRequest URL] scheme] isEqualToString:@"callback"] ) {
// Do something interesting...
return NO;
}
return YES;
}
…然后在webwieb中放置一个链接,如下所示:
<a href="callback:whatever">Click me</a>
它会激活你的回拨码。显然,您可以使用javascript而不是普通链接触发它。我认为该方案不包含冒号。就是"回叫"。为了进行比较,我认为应该使用
-(BOOL)isEqualToString:(NSString*)aString代码>使用这种方法有任何限制吗?例如,我可以在URL中传递的数据是否受到限制?(长度、字符或任何其他限制?)?(例如,对于较新的iOS版本)?@lysergic acid我已经有一段时间没有真正弄乱网络视图了,但我想不会,因为这实际上是一个非常好的解决方案。除非你能以某种方式将一个块绑定到JS事件(查看UIWebView文档)。iOS7确实添加了JavaScriptCore,但我不确定它在这里是否有用。