本文適用于 swift3.0 UIWebView ,主要介紹:
1勺卢、攔截鏈接伙判,在Safari中打開;
2黑忱、給webView的圖片添加點(diǎn)擊事件宴抚;
3、獲取所有圖片鏈接甫煞;
4菇曲、獲取某個(gè)標(biāo)簽的結(jié)點(diǎn)個(gè)數(shù)。
可直接復(fù)制需要的代碼抚吠,如有疑問常潮,歡迎留言或私信。
// MARK:- UIWebView 代理 - 開始加載網(wǎng)頁(yè)
func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
let requestURLScheme = request.url?.scheme
if (requestURLScheme == "http" || requestURLScheme == "https") && navigationType == .linkClicked {
// 超鏈接在Safari中打開
return !UIApplication.shared.openURL(request.url!)
}else if (requestURLScheme == "hyb-image-preview") { // 點(diǎn)擊的是圖片
// 獲取原始圖片的URL
let src = request.url?.absoluteString.replacingOccurrences(of: "hyb-image-preview:", with: "")
if let imageUrl = src {
// 這里已經(jīng)拿到所點(diǎn)擊的圖片的URL了楷力,剩下的部分喊式,自己處理即可
print(imageUrl)
}
}
return true
}
var imgURLArr = [String]()
// MARK:- UIWebView 代理 - 加載網(wǎng)頁(yè)完成
func webViewDidFinishLoad(_ webView: UIWebView) {
// 給webView的圖片添加點(diǎn)擊事件
self.addImgClickEvent(webView: webView)
// 獲取所有圖片鏈接
self.imgURLArr = getImgs(webView: webView)
}
// MARK: 給webView的圖片添加點(diǎn)擊事件
func addImgClickEvent(webView: UIWebView) {
// 在H5頁(yè)面加載完成時(shí),注入圖片點(diǎn)擊的JS代碼
let js = "function addImgClickEvent() { " +
"var imgs = document.getElementsByTagName('img');" +
// 遍歷所有的img標(biāo)簽萧朝,統(tǒng)一加上點(diǎn)擊事件
"for (var i = 0; i < imgs.length; ++i) {" +
"var img = imgs[i];" +
"img.onclick = function () {" +
// 給圖片添加URL scheme岔留,以便在攔截時(shí)可能識(shí)別跳轉(zhuǎn)
"window.location.href = 'hyb-image-preview:' + this.src;" +
"}" +
"}" +
"}"
// 注入JS代碼
webView.stringByEvaluatingJavaScript(from: js)
// 執(zhí)行所注入的JS
webView.stringByEvaluatingJavaScript(from: "addImgClickEvent();")
}
// MARK: 獲取所有圖片鏈接
func getImgs(webView: UIWebView) -> Array<String> {
var arrImgURL = [String]()
for i in 0 ..< self.nodeCountOfTag(tag: "img", webView: webView) {
let jsString = "document.getElementsByTagName('img')[\(i)].src"
arrImgURL.append(webView.stringByEvaluatingJavaScript(from: jsString)!)
}
return arrImgURL
}
// MARK: 獲取某個(gè)標(biāo)簽的結(jié)點(diǎn)個(gè)數(shù)
func nodeCountOfTag(tag: String, webView: UIWebView) -> Int {
let jsString = "document.getElementsByTagName('\(tag)').length"
let len = Int(webView.stringByEvaluatingJavaScript(from: jsString)!)
return len!
}