首先將獲取html的圖片和圖片點擊的方法注入到web里面去:
let js = "var srcArr=[]; var allImage=document.getElementsByTagName('img');for(var i=0;i<allImage.length;i++){var image = allImage[i]; image.index = i;srcArr.push({'pic_url': image.src});image.onclick = function () {window.webkit.messageHandlers.\(getHtmlImagesHandlerName).postMessage({'index':this.index,'srcArr':srcArr});}}"
let userScript = WKUserScript.init(source: js, injectionTime: .atDocumentEnd, forMainFrameOnly: true)
let config = WKWebViewConfiguration.init()
let uservc = WKUserContentController.init()
uservc.addUserScript(userScript)
uservc.add(self, name: getHtmlImagesHandlerName)
config.userContentController = uservc
webView = WKWebView.init(frame: .zero, configuration: config)
上面的代碼就是獲取當前點擊圖片的下標和圖片地址的數(shù)組
//WKScriptMessageHandler 這個是協(xié)議
extension ASRealTimeDetailViewController: WKScriptMessageHandler {
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
if message.name == getHtmlImagesHandlerName {
let bodyTemp = message.body as! [String: Any]
let index = bodyTemp["index"] as! Int
let images = bodyTemp["srcArr"] as! Array<Any>
//下面這個代碼是我自己封裝的查看網(wǎng)絡圖片的瀏覽器
showWebViewBrowser(index, images: images)
}
}
}
可能HTML文字和圖片沒有適應當前屏幕大小,可以加入一下js代碼
guard let m = self.indexModel.detailNewsModel else { return }
let html = "<html> \n <head> \n <meta name='viewport' content='width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no,viewport-fit=cover'/> \n <style type=\"text/css\"> img { max-width: 100%; height: auto } \n body {font-size:14px;}\n </style> \n </head> \n <body> \(m.content ?? "") </body></html>"
htmlString = html
webView.loadHTMLString(html, baseURL: nil)
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。