2012-01-16 27 views
36

Tôi cố gắng để gọi một javascript trong một trang html bằng cách sử dụng chức năng -Calling javascript sử dụng UIWebView

View did load function 
{ 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *writablePath = [documentsDirectory stringByAppendingPathComponent:@"BasicGraph.html"]; 
    NSURL *urlStr = [NSURL fileURLWithPath:writablePath]; 

    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    NSString *myPathInfo = [[NSBundle mainBundle] pathForResource:@"BasicGraph" ofType:@"html"]; 
    [fileManager copyItemAtPath:myPathInfo toPath:writablePath error:NULL]; 

    [graphView loadRequest:[NSURLRequest requestWithURL:urlStr]]; 
} 

- (void) webViewDidFinishLoad:(UIWebView *)webView 
{ 
    [graphView stringByEvaluatingJavaScriptFromString:@"methodName()"]; 
} 

Đây là javascript trên trang html -

<script> 
    function methodName() 
     { 
     // code to draw graph 
     } 

Tuy nhiên , chức năng methodName() không được gọi nhưng sau khi window.onload = function() mọi thứ đều hoạt động tốt ..

Tôi đang cố gắng tích hợp RGraphs vào ứng dụng của mình và Basic.html là trang html, trong đó các javascripts được viết.

Sẽ rất tuyệt nếu ai đó có thể giúp tôi với điều này.

+0

Xin chào, nếu bạn không phiền, bạn có thể chia sẻ mã mẫu của mình nơi tôi có thể gọi rgrpah từ mã iOS gốc không? Nó sẽ rất có ích. từ một tuần trước tôi đang đấu tranh để làm cho nó hoạt động. – iamMobile

+1

Tôi vừa tạo một bản trình diễn thanh lịch về chủ đề chạy Javascript trong UIWebview, vui lòng tham khảo: http: //creiapp.blogspot.hk/2013/04/uiwebview-javascript.html –

Trả lời

66

Đơn giản: Bạn cố thực thi hàm JS từ Objective-C trước khi trang được tải.

Thực hiện UIWebView's delegate methodwebViewDidFinishLoad: trong UIViewController của bạn và trong đó bạn gọi [graphView stringByEvaluatingJavaScriptFromString:@"methodName()"]; để đảm bảo chức năng được gọi sau trang đã được nạp.

+0

Tôi đã cố gắng làm điều đó nhưng vẫn không phải là làm việc .. Tôi đã thay đổi mã trong câu hỏi nhưng không có gì có vẻ làm việc .. – learner2010

+7

nó là một câu hỏi rất hợp lệ và không phải ở tất cả một ngu ngốc .. cảm ơn bạn. tôi quên đặt đại biểu .. và mã hoạt động ngay bây giờ ... – learner2010

9

Để làm rõ thêm một chút.

.h - thực hiện UIWebViewDelegate

@interface YourViewController : UIViewController <UIWebViewDelegate> 
@property (weak, nonatomic) IBOutlet UIWebView *webView; 
@end 

.m

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    NSString *path = @"http://www.google.com"; 
    [_webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:path]]]; 
    _webView.delegate = self; //Set the webviews delegate to this 
} 

- (void) webViewDidFinishLoad:(UIWebView *)webView 
{ 
    //Execute javascript method or pure javascript if needed 
    [_webView stringByEvaluatingJavaScriptFromString:@"methodName();"]; 
} 

Bạn cũng có thể gán các đại biểu từ kịch bản thay vì làm nó trong các mã.

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