說道iOS和H5的混編,其實就是OC(swift)和JS相互調用方法,實現點擊H5頁面上的button,執行iOS原生方法,或者是點擊iOS的按鈕,執行JS方法,話不多說,直接重點!
1、iOS調用JS方法
在iOS中,html頁面是通過UIWebView來展示的,所以,交互的過程離不開UIViewDelegate
通過iOS調用JS代碼實現起來比較方便直接調用UIWebView的方法- (nullable NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;
1.查詢標籤
// 查詢標籤
NSString *str = @"var word = document.getElementById('word');"
@"alert(word.innerHTML)";
[webView stringByEvaluatingJavaScriptFromString:str];
2.爲網頁添加標籤:
NSString *str = @"var img = document.createElement('img');"
"img.src = 'icon5.jpg';"
"img.width = 300;"
"img.heigth = 100;"
"document.body.appendChild(img);";
[webView stringByEvaluatingJavaScriptFromString:str];
3.刪除網頁標籤:
// 刪除標籤
NSString *str1 = @"var word = document.getElementById('word');"
@"word.remove();";
[webView stringByEvaluatingJavaScriptFromString:str1];
4.更改標籤:
// 更改
NSString *str2 = @"var change = document.getElementsByClassName('change')[0];"
"change.innerHTML = 'hello';";
NSString *result = [webView stringByEvaluatingJavaScriptFromString:str2];
HTML端代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>iOS和H5交互</title>
</head>
<body>
<p id="word">6666666666</p>
<ul>
<li class="change">111111</li>
<li class="haha">222222</li>
<li>333333</li>
<li>444444</li>
</ul>
<input class="name" placeholder="請輸入密碼">
<button onclick="buttonClick()">提交信息</button>
<script type="text/javascript">
alert('這個一個彈框');
</script>
</body>
</html>
2、JS調用iOS方法:
1.第一種方法比較簡單,通過字符串的比對。這種方式iOS端代碼比較簡單,網頁加載完成後後臺需要重新定義網頁url,將移動端需要的參數拼接到url上返回,或者按照和後臺約定好的字段來進行字符串比對以達到調用iOS方法的目的。下面貼代碼。
oc代碼:(需要實現webView的協議)
// 攔截協議頭,調取系統攝像頭
#pragma mark UIWebViewDelegate
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType: (UIWebViewNavigationType)navigationType
{
NSString *str = request.URL.absoluteString;
if ([str containsString:@"wxd://"]) {
[self getImage];
}
return YES;
}
- (void)getImage
{
if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) { //調用相冊
//實例化控制器
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
picker.delegate = self;
// 是否有圖片選取框
picker.allowsEditing = YES;
[self presentViewController:picker animated:YES completion:nil];
}
}
HTML端代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>在html中調用oc的方法</title>
</head>
<body>
<button onclick="getImage()">訪問相冊</button>
<script type="text/javascript">
function getImage(){
window.location.href = "wxd://getImage";
}
</script>
</body>
</html>