现在xcode 升级到8.2版本了,对iOS系统支持最低也是8.0系统.
iOS8以后,苹果公司推出了新框架webkit
,提供了替换UIWebView
的组件WKWebView
.相比较UIWebView
,WKWebView
速度更快,占用内存少了很多.iOS8后,WKWebView
是app内部加载网页的最佳内容.
这里有一篇文章分析的很好:WKWebView 和UIWebVIew的性能分析
但是问题有出来了,设置好WKWebView
后,webView
里面的链接点击无效,相反的,在UIWebView
里面点击就可以直接加载跳转.
查看了相关html 元素后,发现
a 链接 target = _blank .
<pre>
a
超连接中target
的意思_blank
-- 在新窗口中打开链接_parent
-- 在父窗体中打开链接_self
-- 在当前窗体打开链接,此为默认值_top
-- 在当前窗体打开链接,并替换当前的整个窗体(框架页)
</pre>
仔细查看 WKWebView 的代理协议中
/*! @abstract Creates a new web view.
创建一个新的webView
@param webView The web view invoking the delegate method.
@param configuration The configuration to use when creating the new web
view.
@param navigationAction The navigation action causing the new web view to
be created.
@param windowFeatures Window features requested by the webpage.
@result A new web view or nil.
@discussion The web view returned must be created with the specified configuration. WebKit will load the request in the returned web view.
If you do not implement this method, the web view will cancel the navigation.
必须创建web视图返回与指定的配置。WebKit将加载请求返回web视图中。如果你不实现这个方法,web视图将取消导航。
*/
- (nullable WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures;
在原有代码中添加上下面代理方法
-(WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures
{
NSLog(@"createWebViewWithConfiguration");
//假如是重新打开窗口的话
if (!navigationAction.targetFrame.isMainFrame) {
[webView loadRequest:navigationAction.request];
}
return nil;
}
问题完美解决...
网友评论