一、UIWebView調用JavaScript代碼
直接寫JavaScript代碼
1、只有在webView加載完畢之後在能夠調用對應頁面中的js方法。
JavaScript代碼寫在如下webView的代理方法中。
-(void)webViewDidFinishLoad:(UIWebView*)webView;//當網頁視圖結束加載一個請求之後,得到通知。
2、與UIWebView進行交互,調用web頁面中的需要傳參的函數時,參數需要帶單引號,或者雙引號(雙引號需要進行轉義在轉義字符前加\),在傳遞json字符串時不需要加單引號或雙引號:
-(void)webViewDidFinishLoad:(UIWebView *)webView {
NSString *sendJsStr=[NSString stringWithFormat:@"openFile(\"%@\")",jsDocPathStr];
[webView stringByEvaluatingJavaScriptFromString:sendJsStr];
}
3、調用JavaScript函數只能在函數寫完後調用,不能使用window.onload = ‘function()’,不能在頁面加載的時候調用。
demo如下:
- (void)webViewDidFinishLoad:(UIWebView *)webView {
// 設置p標籤字體顏色
[webView stringByEvaluatingJavaScriptFromString:@"var script = document.createElement('script');"
"script.type = 'text/javascript';"
"script.text = \"function SetParaColor() {"
"var i = 0;"
"var allP = document.getElementsByTagName('p');"
"for (i; i < allP.length; i++) {"
"var p = allP[i];"
"p.style.color = '#333';"
"}"
"}\";"
"document.getElementsByTagName('head')[0].appendChild(script);"
];
[webView stringByEvaluatingJavaScriptFromString:@"SetParaColor();"];
}
引入JavaScript文件
1、寫個test.js放到項目中
2、引入test.js文件到html中
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"js"];
NSString *jsString = [[NSString alloc] initWithContentsOfFile:filePath];
[webView stringByEvaluatingJavaScriptFromString:jsString];
3、觸發test.js中的函數
二、UIWebView調用JavaScript代碼
1、在html裏面寫重定向請求
在JavaScript寫上:
href = "$://......."
2、在以下代理方法中截獲html裏面的重定向請求
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSString *str = [request.URL absoluteString];
if ([str hasPrefix:@"http"]) {
NSString *url = [Utils URLDecodedString:str];
NSArray *params = [url componentsSeparatedByString:@"?"];
if (params.count > 0) {
if (params.count >=2 ) {
NSArray *value = [params[1] componentsSeparatedByString:@"="];
if ([value[0] isEqualToString:@"name"]) {
[HyperlinkClickManager hyperlinkClickWithParam:value[1] type:@"$" delegate:self.contentView.viewController titleStr:@""];
}else if ([value[0] isEqualToString:@"topicId"]) {
[HyperlinkClickManager hyperlinkClickWithParam:value[1] type:@"#" delegate:self.contentView.viewController titleStr:@""];
}else if ([value[0] isEqualToString:@"clientId"]) {
[HyperlinkClickManager hyperlinkClickWithParam:value[1] type:@"#_" delegate:self.contentView.viewController titleStr:@""];
}else if ([value[0] isEqualToString:@"fid"]) {
[HyperlinkClickManager hyperlinkClickWithParam:value[1] type:@"@" delegate:self.contentView.viewController titleStr:@""];
}else {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
}
}else {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
}
}else {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
}
return NO;
}
return YES;
}