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

LK.*_*LK. 35 javascript cocoa-touch objective-c uiwebview ios

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

bpa*_*apa 31

更新 - 不再使用UIWebView.使用WKWebView,或者更好(如果它符合您的需求,并且您正在为iOS 9构建),Safari View Controller.

但是如果必须在UIWebView委托中使用UIWebView,请为webView提供一个实现:shouldStartLoadWithRequest:navigationType:

在HTML或Javascript文件中,添加将URL发送到自定义方案的函数(出于可读性目的,不需要自定义方案).发送的所有URL都将传递给您的Objective-C方法实现,然后您就可以执行您想要的操作.

  • 是否有一个代码示例来说明这一点 (3认同)

geo*_*eon 31

只是用实际代码来说明"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;
}
Run Code Online (Sandbox Code Playgroud)

...然后在webwieb中添加如下链接:

<a href="callback:whatever">Click me</a>
Run Code Online (Sandbox Code Playgroud)

它应该激活你的回调代码.显然,您可以使用javascript而不是普通链接来触发它.

  • 我认为该计划不包含冒号.这只是@"回调".为了比较,我认为你应该使用` - (BOOL)isEqualToString:(NSString*)aString;` (3认同)