2012-03-03 57 views
0

我正在使用iPhone中的web應用程序,並且從JavaScript調用本機方法時遇到問題。將JavaScript函數注入到UIWebView中不能正常工作

我需要一個值,這是我的viewController類,這樣,我就用window.locationshouldStartLoadWithRequest我能找到需要它的值,然後調用本地方法,我會用發送值基於[webView stringByEvaluatingJavaScriptFromString:userId];

這個值,我需要在本地代碼中調用Web服務。這一次shouldStartLoadWithRequest沒有開火。 即簡單「JS - > Native - > JS - > Native」在這種情況下,webView委託不會觸發。

您能否給我一個解決方案。

+0

你能發表一些代碼嗎?也許在'webView'委託? – HelmiB 2012-03-03 13:00:34

回答

2

正在運行web.html存儲在資源中。

web.html,身體
NSString *path = [[NSBundle mainBundle] pathForResource:@"web" ofType:@"html"]; 
    NSString *jsCode = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; 

    [webView stringByEvaluatingJavaScriptFromString:jsCode]; 
    [webView setDelegate:self]; 
    [webView loadHTMLString:jsCode baseURL:nil]; 

,你應該有onload(),之後webView啓動將火。

<html> <body> <head> 

<script> 

function anyFunction(){ 
    window.location='testing123'; 
} 

</script> 

</head><body onload="anyFunction();"> 
</body></html> 

從那裏,你應該可以抓住「testing123」。

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 
{ 
    NSString *data = [[[request URL] absoluteString] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
    if ([data isEqualToString:@"testing123"]) 
     NSLog(@"value received"); 
}