chourobin
9/10/2012 - 2:51 AM

JavaScript/native bridge for iOS's UIWebView

JavaScript/native bridge for iOS's UIWebView

var sendObjectMessage = function(parameters) {
  var iframe = document.createElement('iframe');
  iframe.setAttribute('src', 'js:' + JSON.stringify(parameters));

  document.documentElement.appendChild(iframe);
  iframe.parentNode.removeChild(iframe);
  iframe = null;
};

sendObjectMessage({name: 'Bryan', company: 'Tumblr'});
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
 navigationType:(UIWebViewNavigationType)navigationType {
    NSString *urlString = [[request URL] absoluteString];
    
    if ([urlString hasPrefix:@"js:"]) {
        NSString *jsonString = [[[urlString componentsSeparatedByString:@"js:"] lastObject] 
                                stringByReplacingPercentEscapes];
        NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
        
        NSError *error;
        id parameters = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers
                                                          error:&error];
        
        if (!error) {
            // TODO: Logic based on parameters
        }
    }
    
    return NO;
}