2010-09-18 19 views
13

Ich habe eine NSString und ein WebView in meinem Projekt (Objective-C für iPhone), ich habe index.html in WebView aufgerufen und in ihr habe ich mein Skript (Javascript) eingefügt.NSString in UIWebview

Wie kann ich den NSString als Var in meinem Skript übergeben und umgekehrt?

Dies ist ein example, aber ich verstehe es nicht sehr gut.

+0

Ich habe UIWebView und UIWebViewDelegate Tags hinzugefügt (anstelle von Xcode und HTML) –

Antwort

30

Senden Zeichenfolge zur Web-Ansicht:

[webView stringByEvaluatingJavaScriptFromString:@"YOUR_JS_CODE_GOES_HERE"]; 

Senden String aus Webansicht auf Obj-C:

erklären, dass Sie die UIWebViewDelegate Protokoll (in der H-Datei) implementieren:

@interface MyViewController : UIViewController <UIWebViewDelegate> { 

    // your class members 

} 

// declarations of your properties and methods 

@end 

In Objective-C (in der .m-Datei):

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

In Objective-C (in der .m-Datei) zu:

- (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; 
    } 
} 

Innere JS:

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

und umgekehrt? :-) – MJB

0

Wenn ein NSString in eine UIWebView vorbei (für die Verwendung als Javascript String) Sie müssen sicherstellen, Zeilenumbrüche sowie einfache/doppelte Anführungszeichen zu umgehen:

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]; 

Die r everse-Prozess ist gut von @ Michael-Kessler beschrieben