Frage

Ich versuche, ein Javascript auf einer HTML-Seite mit der Funktion - aufzurufen

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

Hier ist das Javascript auf der HTML-Seite -

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

Die Funktion methodName() wird jedoch nicht aufgerufen, sondern nach window.onload= function () funktioniert alles einwandfrei.

Ich versuche, RGraphs in meine Anwendung zu integrieren, und Basic.html ist die HTML-Seite, auf der die Javascripts geschrieben sind.

Es wäre großartig, wenn mir jemand dabei helfen könnte.

War es hilfreich?

Lösung

Einfach: Sie versuchen, die JS-Funktion von Objective-C aus auszuführen, bevor die Seite überhaupt geladen wurde.

Implementieren Sie den UIWebView-Delegatenmethode in Ihren webViewDidFinishLoad:UIViewController und dort rufen Sie [graphView stringByEvaluatingJavaScriptFromString:@"methodName()"]; auf, um sicherzustellen, dass die Funktion aufgerufen wird, nachdem die Seite geladen wurde.

Andere Tipps

Um ein bisschen mehr zu klären.

.h - Implementieren Sie das 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();"];
}

Sie können den Delegaten auch aus dem Storyboard zuweisen, anstatt dies im Code zu tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top