web-dev-qa-db-ja.com

C / Objective-CへのUIWebViewコールバックのJavaScript

UIWebViewで特定のイベントが検出されたときにobjective-cにコールバックを取得する方法はありますか? JavaScriptはObjective-Cにコールバックを送信できますか?

35
LK.

更新-UIWebViewを使用しないでください。 WKWebViewを使用するか、Safari View Controllerを使用します(ニーズに適合し、iOS 9向けに構築している場合)。

ただし、UIWebViewを使用する必要がある場合は、UIWebViewデリゲートで webView:shouldStartLoadWithRequest:navigationType: の実装を提供します

HTMLファイルまたはJavaScriptファイルに、カスタムスキームにURLを送信する関数を追加します(読みやすくするために、カスタムスキームは必要ありません)。送信されたすべてのURLがObjective-Cメソッドの実装に渡され、必要な操作を実行できます。

31
bpapa

実際のコードで「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でトリガーすることもできます。

31
geon