首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

无法使用WKWebView在safari中打开外部链接

问题:无法使用WKWebView在safari中打开外部链接

答案: WKWebView是一种用于在iOS应用程序中显示网页内容的组件。然而,有时候在使用WKWebView时,可能会遇到无法在Safari中打开外部链接的问题。

这个问题通常是由于WKWebView默认情况下不支持打开外部链接所导致的。为了解决这个问题,可以通过实现WKNavigationDelegate协议中的方法来处理外部链接的打开。

以下是一种可能的解决方案:

  1. 首先,确保你的视图控制器(ViewController)遵循WKNavigationDelegate协议,并将其设置为WKWebView的导航代理。
代码语言:txt
复制
class ViewController: UIViewController, WKNavigationDelegate {
    // ...
    webView.navigationDelegate = self
    // ...
}
  1. 然后,实现WKNavigationDelegate协议中的decidePolicyFor方法,该方法在加载请求之前被调用。在该方法中,你可以检查请求的URL,并决定是否允许加载该请求。
代码语言:txt
复制
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    if let url = navigationAction.request.url {
        if navigationAction.navigationType == .linkActivated && !url.host?.lowercased().hasPrefix("yourdomain.com") {
            UIApplication.shared.open(url)
            decisionHandler(.cancel)
            return
        }
    }
    decisionHandler(.allow)
}

在上述代码中,我们检查了请求的URL,并判断了导航类型是否为链接激活(linkActivated)。如果是外部链接且不属于你的域名(yourdomain.com),我们使用UIApplication.shared.open方法打开该链接,并取消WKWebView的加载。

这样,当用户点击外部链接时,将会在Safari中打开该链接,而不是在WKWebView中加载。

需要注意的是,上述代码中的"yourdomain.com"应替换为你自己的域名。

希望这个解决方案能够帮助你解决无法使用WKWebView在Safari中打开外部链接的问题。

腾讯云相关产品推荐:腾讯云移动浏览器网页容器服务(Tencent X5),它是一款基于腾讯浏览服务(TBS)内核的移动浏览器网页容器,提供了更好的网页浏览体验和更高的兼容性。你可以通过以下链接了解更多信息:腾讯云移动浏览器网页容器服务

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

使用 jQuery 新窗口打开外部链接

我们一般都希望新窗口打开外部链接,这样用户就不需要离开网站就能访问外部链接,但是如果每个外部链接都手工加上新窗口打开的属性(target="_blank")的话,会让人非常抓狂。...使用 jQuery,我们只需要几行代码就能在新窗口中打开外部链接。 1....找到外部链接 首先我们需要找到所有的外部链接 $(document).ready() 函数添加如下代码: $("a[href*='http://']:not([href*='"+location.hostname...“external” Class ,这样就可以使用 CSS 来样式化外部链接了。...让外部链接在新窗口打开 如果你想外部链接在新窗口打开,继续增加如下一行代码: $("a[href*='http://']:not([href*='"+location.hostname+"']),[href

2.6K20
  • Hybrid App 应用 开发 9 个必备知识点复习(WebView 调试 等)

    库加载并使用, UIWebView 限制了; WKWebView 目前缺少关于页码相关的 API; WKWebView 提供加载网页进度的属性; WKWebView 使用 Safari 相同的 JavaScript...WKWebView NSURLProtocol问题 WKWebView 独立于 app 进程之外的进程执行网络请求,请求数据不经过主进程,因此, WKWebView 上直接使用 NSURLProtocol...如果你需要在 WebView 打开链接或者你打开的页面带有 flash,获得你的 WebView 想弹出一个 dialog ,都会导致从 ApplicationContext 到 ActivityContext...如果调试的是 H5 页面,可以直接在手机的 Safari浏览器 打开直接调试。 下面开始说说 Mac 上如何调试: 1....开启 Safari 开发菜单 先将 iPhone 连接到 Mac, Mac 的 Safari 偏好设置,开启开发菜单。

    3.1K00

    【Hybrid】288- Hybrid App 应用开发 9 个必备知识点复习

    限制了; WKWebView 目前缺少关于页码相关的 API; WKWebView 提供加载网页进度的属性; WKWebView 使用 Safari 相同的 JavaScript 引擎; WKWebView...WKWebView NSURLProtocol问题 WKWebView 独立于 app 进程之外的进程执行网络请求,请求数据不经过主进程,因此, WKWebView 上直接使用 NSURLProtocol...如果你需要在 WebView 打开链接或者你打开的页面带有 flash,获得你的 WebView 想弹出一个 dialog ,都会导致从 ApplicationContext 到 ActivityContext...如果调试的是 H5 页面,可以直接在手机的 Safari浏览器 打开直接调试。 下面开始说说 Mac 上如何调试: 1....开启 Safari 开发菜单 先将 iPhone 连接到 Mac, Mac 的 Safari 偏好设置,开启开发菜单。

    2.3K20

    Hybrid App 应用开发 9 个必备知识点复习

    UIWebView 限制了; WKWebView 目前缺少关于页码相关的 API; WKWebView 提供加载网页进度的属性; WKWebView 使用 Safari 相同的 JavaScript...WKWebView NSURLProtocol问题 WKWebView 独立于 app 进程之外的进程执行网络请求,请求数据不经过主进程,因此, WKWebView 上直接使用 NSURLProtocol...如果你需要在 WebView 打开链接或者你打开的页面带有 flash,获得你的 WebView 想弹出一个 dialog ,都会导致从 ApplicationContext 到 ActivityContext...如果调试的是 H5 页面,可以直接在手机的 Safari浏览器 打开直接调试。 下面开始说说 Mac 上如何调试: 1....开启 Safari 开发菜单 先将 iPhone 连接到 Mac, Mac 的 Safari 偏好设置,开启开发菜单。

    2.7K20

    Hybrid App 应用开发 9 个必备知识点复习

    限制了; WKWebView 目前缺少关于页码相关的 API; WKWebView 提供加载网页进度的属性; WKWebView 使用 Safari 相同的 JavaScript 引擎; WKWebView...WKWebView NSURLProtocol问题 WKWebView 独立于 app 进程之外的进程执行网络请求,请求数据不经过主进程,因此, WKWebView 上直接使用 NSURLProtocol...如果你需要在 WebView 打开链接或者你打开的页面带有 flash,获得你的 WebView 想弹出一个 dialog ,都会导致从 ApplicationContext 到 ActivityContext...如果调试的是 H5 页面,可以直接在手机的 Safari浏览器 打开直接调试。 下面开始说说 Mac 上如何调试: 1....开启 Safari 开发菜单 先将 iPhone 连接到 Mac, Mac 的 Safari 偏好设置,开启开发菜单。

    2.3K30

    iPhone页面的常用调试方法

    iPhone调试,大体上与上文 安卓的移动页面调试 类似,区别主要是iOS系统的一些限制,导致某些工具无法使用。 本文基于此,简要介绍iPhone如何调试页面。...WKWebView Windows结合Fiddler与ios_webkit_debug_proxy中转实现Chrome调试手机的Safari浏览器 一、能够访问页面 某些页面需要设置HOST才能进行访问...不过对于iPhone的调试,还需要进行真机的页面查看 一般来说,iPhone的页面是Safari浏览器查看的 微信中的内置浏览器是WKWebView内核或 UIWebView ,WKWebView...美中不足还是无法检测微信中的页面 Windows配置 windows配置相对麻烦了些,首先需要安装powershell(win10已经自带),然后安装 scoop ,再安装这个插件 安装powershell3...安装成功后,即可打开新的微信使用 ? 登陆后,访问相关页面,就可以调试webview了 方法同上,可在Mac上使用Safari来调试内置浏览器的页面,公众号,小程序等 ?

    3.3K10

    WKWebView 那些坑

    WKWebView 中加载下面的测试链接可以稳定重现白屏现象: http://people.mozilla.org/~rnewman/fennec/mem.html 这个时候 WKWebView.URL...不过 WKWebView WKProcessPool 实例 app 杀进程重启后会被重置,导致 WKProcessPool 的 Cookie、session Cookie 数据丢失,目前也无法实现...3、WKWebView NSURLProtocol问题 WKWebView 独立于 app 进程之外的进程执行网络请求,请求数据不经过主进程,因此, WKWebView 上直接使用 NSURLProtocol...fe39539b83d28751e86077b173abd5b7872ce3f9/Source/WebKit2/Shared/mac/WebCoreArgumentCodersMac.mm#L61-L88 (复制链接到浏览器打开...id=138169 (复制链接到浏览器打开) 因此,如果通过 registerSchemeForCustomProtocol 注册了 http(s) scheme, 那么由 WKWebView 发起的所有

    4.6K130

    使用WebSocketServer类无法使用Autowired注解进行自动注入

    问题 SpringBoot项目中使用WebSocket的过程中有其他的业务操作需要注入其它接口来做相应的业务操作,但是WebSocket的Server类中使用Autowired注解无效,这样注入的对象就是空...,使用过程中会报空指针异常。...注释:上面说的WebSocket的Server类就是指被@ServerEndpoint注解修饰的类 原因 原因就是spring容器管理的是单例的,他只会注入一次,而WebSocket是多对象的,当有新的用户使用的时候...WebSocket对象,这就导致了用户创建的WebSocket对象都不能注入对象了,所以在运行的时候就会发生注入对象为null的情况; 主要的原因就是Spring容器管理的方式不能直接注入WebSocket的对象

    5.5K60

    问题记录

    然后笔者取到照片的链接在 Chrome 打开,发现图片是可以显示的; Safari 打开,是黑色的;且从 Chrome 右键保存到本地,预览打开也是黑色。...这张图片的 Mac OS 和 iOS 渲染都是黑色的。...WKWebview加载xlsx 文件,预览不了的问题 笔者这边的情况是,打开了一个网页,网页的有个按钮,点击之后的链接,正常在电脑浏览器上打开是下载, iOS 的 WKWebview打开是预览。...于是怀疑是用户摄像头出问题了,询问用户使用企业微信唤起扫一扫界面是否正常,用户反馈正常。 陷入了僵局,最后用户反馈打开系统相机也是黑屏,但是把缩放调到2倍就正常了。...于是怀疑是摄像头坏了一颗, 默认是使用正常的摄像头拍摄,当拍远景或者缩放调到2倍时使用了广角的镜头,用户的应该是正常摄像头坏掉了,而另一颗远景的是好的。 但是为什么企业微信的是好的?

    1.3K20

    WKWebView 那些坑

    作者:林泽水 导语 WKWebView是苹果在WWDC 2014上推出的新一代webView组件,用以替代UIKit笨重难用、内存泄漏的UIWebView, 拥有60fps滚动刷新率、和safari...WKWebView中加载下面的测试链接可以稳定重现白屏现象:http://people.mozilla.org/~rnewman/fennec/mem.html 这个时候webView.URL会变为nil...不过WKWebView WKProcessPool实例app杀进程重启后会被重置,导致WKProcessPool的Cookie、session Cookie数据丢失,目前也无法实现WKProcessPool...3、WKWebView NSURLProtocol问题 WKWebView独立于app进程之外的进程执行网络请求,请求数据不经过主进程,因此,WKWebView上直接使用NSURLProtocol...退出的时候,JS刚好执行了window.alert(), alert框可能弹不出来,completionHandler最后没有被执行,导致crash;另一种情况是WKWebView打开,JS就执行window.alert

    17.3K21

    使用链接服务器异构数据库查询数据

    链接到一种数据库需要使用相应的接口。微软为很多数据库提供了驱动接口,所以可以直接使用,但是对于没有提供驱动的数据库比如Sybase,则需要在服务器上安装对应数据库厂商提供的驱动。...使用SSMS或者使用T-SQL语句配置成功链接服务器后便可通过: [服务器名].[数据库名].[架构名].[对象名] 的形式来访问数据库。...但是当Oracle的这个表数据量较大,比如有几十万行或者几百万行时,这个查询将会耗费很长时间。SQL Server运行该脚本可能要等上10秒、20秒或者1分钟、5分钟才可能查询出结果。...但是如果将脚本Oracle服务器上直接运行,则1秒钟不到就查询出结果了。造成这种情况的是SQL Server查询链接服务器的机制。 不同的数据库对应的SQL语言是有所不同的。...query'链接服务器执行的查询字符串。该字符串的最大长度为8KB。

    4.3K10
    领券