1、Objective-c調用js方法,只是需要調用uiwebview自帶的方法就可以了。
[webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"getHtmlString(‘%@’)",htmlStr]];
2、js調用Objective-c方法,這時就需要和js約定一個參數或者方法了。
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
在這個回調方法中,我們會得到服務器傳過來的數據request,我們可以判斷穿過來的參數,然後進行判斷調用oc的方法。
if ([request.URL.scheme isEqualToString:@"gethtmlstring"]) {
NSString *htmlStr = [self getHtmlString:description];
htmlStr = [htmlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"getHtmlString(\"%@\")",htmlStr]];
}
這樣就實現了對Objective-C的調用了。
在這裡特別值得注意的問題:我這裡傳了html格式的參數。我在這裡就遇到了,傳過去的參數始終不對,無法調用js的方法。
stringWithContentsOfFile,這個方法用來讀取文件,如果不指定編碼方式的話,有可能造成數據的丟失,所以我這裡指定了utf-8的編碼方式。 在傳參數的時,還有可能的一種問題。這個參數裡面如果帶有(\r \n ')等等, js那邊收不到這個值, 這些帶\的需要轉義, 如下這麼寫js才能收到完整的消息:
message = [message stringByReplacingOccurrencesOfString:@"\n" withString:@"\\\\n"];
NSString *jsMethod = [NSString stringWithFormat:@"JsMethod(\"%@\")", message]
例子代碼:
免費下載地址在 http://linux.linuxidc.com/
用戶名與密碼都是www.linuxidc.com
具體下載目錄在 /2013年資料/6月/9日/Objective-C與js相互調用及傳參數注意