Domanda

Sto cercando di chiamare un javascript in una pagina html utilizzando la funzione -

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

Ecco il javascript nella pagina html -

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

Tuttavia, la funzione methodName() non viene chiamata ma dopo window.onload= function () tutto funziona correttamente ..

Sto cercando di integrare RGraphs nella mia applicazione e Basic.html è la pagina html in cui sono scritti i javascript.

Sarebbe fantastico se qualcuno potesse aiutarmi con questo.

È stato utile?

Soluzione

Semplice: si tenta di eseguire la funzione JS da Objective-C prima ancora che la pagina sia stata caricata.

Implementa il metodo delegato di UIWebView webViewDidFinishLoad: nel tuoUIViewController e lì chiami [graphView stringByEvaluatingJavaScriptFromString:@"methodName()"]; per assicurarti che la funzione venga chiamata dopo che la pagina è stata caricata.

Altri suggerimenti

Per chiarire un po 'di più.

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

Potresti anche assegnare il delegato dallo storyboard invece di farlo nel codice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top