2013-07-09 50 views
0

我想從我的objective-c調用javascript函數。這爲iPhone。我知道如何JavaScript函數調用與該行調用javascript objective-c不可見uiwebview

NSString *returnValue = [webView stringByEvaluatingJavascriptFromString:method]; 

這樣做,但我其實不想網頁視圖被視爲或用作UI的一部分。所以,我可以在以某種方式調用上述方法之前立即創建它的一個實例。

我曾嘗試:

UIWebView *webView = [[UIWebView alloc]initWithFrame:CGRectZero]; 
[webView loadRequest:[NSUrLRequest requestWithUrl:url]]; 

,但似乎沒有發生。那麼有沒有類似於我打算使用的上述方法。

+0

它添加到視圖不是主要問題。查看我的答案以獲得完整的解決方案 –

回答

1

在您的控制器視圖中添加webview以運行javascript。它不會被看到,因爲它的高度和寬度都是零。

+0

我之前把它添加到視圖之前會發生這樣的事情會發生,但我得到了錯誤「應用程序窗口預計有一個根視圖控制器」 – walsh06

+0

你在哪裏嘗試添加它?你應該在視圖控制器裏面做這個。 [self addSubview:web view]; – Vame

+0

我之前必須做出錯誤的事情,因爲我再次嘗試過,並且這次它有效。所以謝謝你的幫助。 – walsh06

0

您的問題與UIWebView的大小無關。這只是一個時間問題。以下代碼根據需要使用零實例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 
+0

不能我不只是使用webViewDidFinishLoad而不是手動延遲? – walsh06

+0

@ walsh06 - 你試過了嗎?關鍵是你有時間問題,我已經爲你提供了一個工作的例子。我已經更新了答案,以顯示委託方法也適用。 –