我想从我的objective-c调用javascript函数。这适用于iphone。我理解如何用这行来完成对javascript函数的调用
NSString *returnValue = [webView stringByEvaluatingJavascriptFromString:method];
但我实际上并不希望将webview视为用户界面的一部分。因此,我可以在以某种方式调用上述方法之前创建它的实例。
我试过了:
UIWebView *webView = [[UIWebView alloc]initWithFrame:CGRectZero];
[webView loadRequest:[NSUrLRequest requestWithUrl:url]];
但似乎没有任何事情发生。那么我是否有一种与上述类似的方法。
答案 0 :(得分:1)
在控制器的视图中添加webview以运行javascript。它不会被看到,因为它的高度和宽度都没有。
答案 1 :(得分:0)
您的问题与UIWebView
的大小无关。这只是一个时间问题。以下代码根据需要使用零rect UIWebView
实例。请注意使用UIWebViewDelegate
方法webViewDidFinishLoad:
。 UIWebView
速度很慢,视图加载其内容并准备接受JavaScript命令需要一些时间。
@interface NGViewController () <UIWebViewDelegate>
@property (nonatomic, strong) UIWebView *hiddenWebView;
@end
@implementation NGViewController
@synthesize hiddenWebView = _hiddenWebView;
- (void)viewWillLayoutSubviews
{
[super viewWillLayoutSubviews];
if (!self.hiddenWebView.superview)
{
[self.view addSubview:self.hiddenWebView];
}
}
- (UIWebView *)hiddenWebView
{
if (!_hiddenWebView) {
_hiddenWebView = [UIWebView.alloc initWithFrame:CGRectZero];
_hiddenWebView.delegate = self;
[_hiddenWebView loadHTMLString:@"<html><head><script>window.james = 'My name';</script></head><body><h1>Hidden Web View by James</h1></body></html>" baseURL:nil];
}
return _hiddenWebView;
}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
NSString *documentBodyString = [self.hiddenWebView stringByEvaluatingJavaScriptFromString:@"window.james;"];
NSLog(@"The body's inner HTML is: %@", documentBodyString);
}
@end
其输出为:
2013-07-09 03:13:29.347 WebViewTest[14261:c07] The body's inner HTML is: My name