Chiamare Javascript utilizzando UIWebView
-
29-10-2019 - |
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.
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.