UIWebView回调到C/Objective-C中的Javascript

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

当在UIWebView中检测到某个事件时,是否有方法获得对objective-c的回调?Javascript可以向Objective-C发送回调吗?

更新-不再使用UIWebView。使用WKWebView,或者更好(如果它适合您的需要并且您正在为iOS 9构建),Safari视图控制器

但如果必须使用UIWebView,请在UIWebView委托中为


在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,但我不确定它在这里是否有用。