Вызов Javascript с помощью UIWebView

Я пытаюсь вызвать 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
      }

However, the function methodName() is not getting called but after window.onload = function () everything is working fine..

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

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


person learner2010    schedule 16.01.2012    source источник
comment
Эй, если вы не возражаете, не могли бы вы поделиться своим примером кода, где я могу вызвать rgrpahs из собственного кода iOS? Это будет очень полезно. с прошлой недели я изо всех сил пытаюсь заставить его работать.   -  person iamMobile    schedule 27.07.2012
comment
Я только что создал элегантную демонстрацию на тему запуска Javascript в UIWebview, см. :creiapp.blogspot.hk/2013/04/uiwebview-javascript.html   -  person Cullen SUN    schedule 18.04.2013


Ответы (2)


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

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

person Björn Kaiser    schedule 16.01.2012
comment
Я пытался это сделать, но все равно это не работает. Я изменил код в вопросе, но, похоже, ничего не работает. - person learner2010; 17.01.2012
comment
это очень правильный вопрос и совсем не глупый .. спасибо. я забыл установить делегата... и теперь код работает... - person learner2010; 17.01.2012

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

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

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

person Kalel Wade    schedule 13.06.2014