2013-06-14 27 views
7

Tôi đã một UIWebView nhúng trong bộ điều khiển quan điểm của tôi như thế này:Đi qua dữ liệu đến và từ một UIWebView Embedded

enter image description here

Tôi có một ổ cắm để xem web của tôi() và tôi có thể tải thành công nội dung của test.html trong đó sử dụng này:

[_graphTotal loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"test" ofType:@"html"]isDirectory:NO]]];

bây giờ tôi đang cố gắng để truyền dữ liệu đến xem web và không có bất kỳ may mắn. Tôi đã thêm <UIWebViewDelegate> và đây là những gì tôi đang cố gắng:

NSString *userName = [_graphTotal stringByEvaluatingJavaScriptFromString:@"testFunction()"]; 
NSLog(@"Web response: %@",userName); 

Và đây là nội dung của test.html trong dự án của tôi:

<html> 
    <head></head> 
    <body> 
    Testing... 
     <script type="text/javascript"> 
     function testFunction() { 
      alert("made it!"); 
      return "hi!"; 
     } 
     </script> 
    </body> 
</html> 

tôi có thể thấy "Thử nghiệm ..." trong WebView của tôi , nhưng tôi không thấy cảnh báo cũng không trả lời "hi!" chuỗi.

Bất kỳ ý tưởng nào tôi đang làm sai?

Trả lời

14

Vấn đề là bạn đã thử đánh giá javascript của mình trước khi webview có cơ hội tải trang. Đầu tiên thông qua giao thức <UIWebViewDelegate> vào bộ điều khiển xem của bạn:

@interface ViewController : UIViewController <UIWebViewDelegate> 

Sau đó kết nối các đại biểu của webview của bạn để điều khiển xem của bạn, hãy yêu cầu và cuối cùng là thực hiện delegate methods. Đây là một trong đó thông báo cho bạn khi webview đã tải xong:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [self.graphTotal loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"test" ofType:@"html"]isDirectory:NO]]]; 
} 

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    NSString *userName = [self.graphTotal stringByEvaluatingJavaScriptFromString:@"testFunction()"]; 
    NSLog(@"Web response: %@",userName); 
} 

PS: Một trong những giới hạn bạn phải được nhận thức khi bạn đang đánh giá javascript cách này là kịch bản của bạn phải được thực hiện trong vòng 10 giây. Vì vậy, nếu ví dụ bạn đã chờ hơn 10 giây để loại bỏ cảnh báo, bạn sẽ gặp lỗi (không thể quay lại sau khi đợi 10 giây). Tìm hiểu thêm về các giới hạn in the docs.

+0

Tuyệt vời, điều này rất hữu ích. Tôi đã thêm đại biểu nhưng không được kết nối trong Trình tạo giao diện. Tôi cũng cần phương thức 'webViewDidFinishLoad'. Cảm ơn! –

Các vấn đề liên quan