Aufruf von Javascript mit UIWebView
-
29-10-2019 - |
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.
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.