Вызов Javascript с использованием UIWebView - PullRequest
36 голосов
/ 17 января 2012

Я пытаюсь вызвать javascript на html-странице с помощью функции -

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()"];
}

Вот javascript на html-странице -

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

Однако функция methodName() не вызывается, но после window.onload = function () все работает нормально ..

Я пытаюсь интегрировать RGraphs в мое приложение и Basic.html - это html-страница, на которой написаны javascript.

Было бы здорово, если бы кто-нибудь помог мне с этим.

Ответы [ 2 ]

68 голосов
/ 17 января 2012

Простой: вы пытаетесь выполнить функцию JS из Objective-C еще до загрузки страницы.

Реализуйте метод делегата UIWebView webViewDidFinishLoad: в вашем UIViewController и там вы вызываете [graphView stringByEvaluatingJavaScriptFromString:@"methodName()"];, чтобы убедиться, что функция вызывается после загрузки страницы.

10 голосов
/ 13 июня 2014

Чтобы уточнить немного больше.

.h - реализовать 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();"];
}

Вы также можете назначить делегата из раскадровки вместо того, чтобы делать это в коде.

...