UIWebView内のJavaScriptからObjective-Cに何か伝える

ツイート このエントリーをはてなブックマークに追加
ブログトップへ

UIWebViewには、AndroidのWebViewのようにJavaScriptのためのインターフェースを用意するメソッドはありません。なので、UIWebViewで拾えるイベントをHTML/JavaScriptから発生させる必要があります。

Step 1. UIWebViewでイベントを拾えるようにする

UIWebViewDelegateを実装し、UIWebViewのdelegateを設定します。

@interface MyViewController : UIViewController <UIWebViewDelegate>

@property(weak) IBOutlet UIWebView *webView;

@end

@implementation MyViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.webView.delegate = self;
}

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)
request navigationType:(UIWebViewNavigationType)navigationType
{
    NSLog(@"called from UIWebView");
    return YES;
}
@end

Step 2. HTMLで適当なスキーマでリンクを作る

native://log のように、http/https以外にしておきます。

<a href="native://log?msg=1122">call!</a>

Step 3. native://が来た時だけ、別の処理をする

webView:shouldStartLoadWithRequest:navigationType:の中で、native://が来た時だけ、別のメソッドを読んでUIWebView側は何もしない という処理を書いてみます。

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)
request navigationType:(UIWebViewNavigationType)navigationType
{
    NSString *scheme = request.URL.scheme;
    if ([scheme isEqualToString:@"native"]) {
        NSLog(@"query is %@", request.URL.query);
        return NO;
    }
    NSLog(@"called from UIWebView");
    return YES;
}

return NOでUIWebView自体の遷移処理は止まります。

queryをパースして、引数のようにして使うともっと幅が広がりますよね。

Step 4. 結果をJavaScriptで伝える

こちらを読んでくださいな。

ブログトップへ