编写IOS端的APP时,经常需要当wkwebview中加载H5页面,对于这个页面中的链接、文字、图片等元素,当用力按压的时候,就会弹出相关信息,对于链接而言还会同时调起safari打开网页,一般而言,对于客户体验这是相当不好的。
网上的方法很多,但是都不是很有效。
我做了3个方面的工作
第一步,在页面的css中加入相关禁止
<style type="text/css"> html, body { -webkit-touch-callout: none; -webkit-user-select: none; } </style>
-webkit-touch-callout: none;
在iOS上,当你触摸并按住触摸的目标,比如一个链接,Safari浏览器将显示链接有关的系统默认菜单。这个属性可以让你禁用系统默认菜单。
-webkit-user-select: none;
的意思很明显就是禁止复制文本。
第二步,在swift中:
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { self.webView?.evaluateJavaScript("document.documentElement.style.webkitTouchCallout='none';", completionHandler: nil) }
这个意思就是通过wkwebview来执行一次webkitTouchCallout,禁用系统默认菜单
第三部,在swift中
很不幸,经过我的试验,经过上面两步之后,效果仍然非常不理想,长按链接还是会弹出相关信息,并且在safari中打开。
经过扫描wkwebview的属性发现, 原来他自己是有相关设置的。
self.nwebview?.allowsLinkPreview=false
这个属性就是allowsLinkPreview,初始化webview之前设置allowsLinkPreview=false,之后长按wkwebview网页中的链接再无反应!!
点击链接之后就会在app中打开相应网页,而不会跳转到app之外打开了。