2010-09-18 23 views
13

Tôi có một NSString và một webView trong dự án của tôi (Objective-C cho iPhone), tôi đã gọi index.html trong webView và bên trong nó tôi đã chèn tập lệnh của mình (javascript).NSString trong UIWebview

Làm cách nào để chuyển NSString dưới dạng var trong tập lệnh và ngược lại?

Đây là một example, nhưng tôi không hiểu nó rất rõ.

+0

Tôi đã thêm UIWebView và UIWebViewDelegate vào thẻ (thay vì xcode và html) –

Trả lời

30

Gửi chuỗi để xem web:

[webView stringByEvaluatingJavaScriptFromString:@"YOUR_JS_CODE_GOES_HERE"]; 

Gửi chuỗi từ xem web để obj-C:

tuyên bố rằng bạn thực hiện các giao thức UIWebViewDelegate (bên trong file .h):

@interface MyViewController : UIViewController <UIWebViewDelegate> { 

    // your class members 

} 

// declarations of your properties and methods 

@end 

Trong mục tiêu-C (bên trong tệp .m):

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

Trong Objective-C (bên trong file .m) quá:

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

Bên JS:

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

và cách khác? :-) – MJB

0

Khi đi qua một NSString thành một UIWebView (để sử dụng như là một String javascript) bạn cần đảm bảo thoát khỏi các dòng mới cũng như các dấu nháy đơn/kép:

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

R quá trình everse được mô tả rõ ràng bởi @ Michael-Kessler