使用UIWebView调用Javascript
我正在尝试使用函数在HTML页面中调用一个JavaScript –
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()"]; }
这是HTML页面上的JavaScript –
<script> function methodName() { // code to draw graph }
但是,函数methodName()
没有被调用,但在window.onload = function()之后,一切正常工作。
我正在尝试将RGraphs集成到我的应用程序中,并且Basic.html
是写入JavaScript的html页面。
如果有人能帮我解决这个问题,那将会很棒。
简单:在页面加载之前,您尝试从Objective-C执行JS函数。
实现UIWebView的委托方法 webViewDidFinishLoad:
在你的UIViewController中,在那里调用[graphView stringByEvaluatingJavaScriptFromString:@"methodName()"];
以确保该函数在页面加载后被调用。
澄清一点点。
.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();"]; }
您也可以从故事板中分配委托,而不是在代码中执行。