2010-09-18 1 views
13

Ho un NSString e una webView nel mio progetto (Objective-C per iPhone), ho chiamato index.html in webView e al suo interno ho inserito il mio script (javascript).NSString in UIWebview

Come posso passare NSString come una variabile nel mio script e viceversa?

Questo è un example, ma non lo capisco molto bene.

+0

Ho aggiunto UIWebView e UIWebViewDelegate ai tag (anziché xcode e html) –

risposta

30

Invia stringa alla visualizzazione Web:

[webView stringByEvaluatingJavaScriptFromString:@"YOUR_JS_CODE_GOES_HERE"]; 

Invia stringa dalla visualizzazione Web a Obj-C:

dichiarare che si implementa il protocollo UIWebViewDelegate (all'interno del file .h):

@interface MyViewController : UIViewController <UIWebViewDelegate> { 

    // your class members 

} 

// declarations of your properties and methods 

@end 

In Objective-C (all'interno del file .m):

// right after creating the web view 
webView.delegate = self; 

In Objective-C (all'interno del file .m) troppo:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { 
    NSString *url = [[request URL] absoluteString]; 

    static NSString *urlPrefix = @"myApp://"; 

    if ([url hasPrefix:urlPrefix]) { 
     NSString *paramsString = [url substringFromIndex:[urlPrefix length]]; 
     NSArray *paramsArray = [paramsString componentsSeparatedByString:@"&"]; 
     int paramsAmount = [paramsArray count]; 

     for (int i = 0; i < paramsAmount; i++) { 
      NSArray *keyValuePair = [[paramsArray objectAtIndex:i] componentsSeparatedByString:@"="]; 
      NSString *key = [keyValuePair objectAtIndex:0]; 
      NSString *value = nil; 
      if ([keyValuePair count] > 1) { 
       value = [keyValuePair objectAtIndex:1]; 
      } 

      if (key && [key length] > 0) { 
       if (value && [value length] > 0) { 
        if ([key isEqualToString:@"param"]) { 
         // Use the index... 
        } 
       } 
      } 
     } 

     return NO; 
    } 
    else { 
     return YES; 
    } 
} 

All'interno JS:

location.href = 'myApp://param=10'; 
+3

e viceversa? :-) – MJB

0

Quando si passa un NSString in un UIWebView (per l'utilizzo come una stringa javascript) è necessario fare in modo di sfuggire a capo e/doppi apici:

NSString *html = @"<div id='my-div'>Hello there</div>"; 

html = [html stringByReplacingOccurrencesOfString:@"\'" withString:@"\\\'"]; 
html = [html stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""]; 
html = [html stringByReplacingOccurrencesOfString:@"\n" withString:@"\\n"]; 
html = [html stringByReplacingOccurrencesOfString:@"\r" withString:@""]; 

NSString *javaScript = [NSString stringWithFormat:@"injectSomeHtml('%@');", html]; 
[_webView stringByEvaluatingJavaScriptFromString:javaScript]; 

Il r Il processo di eversione è ben descritto da @ Michael-Kessler