首页
学习
活动
专区
工具
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.5K130

    使用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.2K21

    iOS 创建 Universal Links【修订】

    /library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html wap唤起app最广泛使用的方式并不是...Universal Link,而是直接Schema跳转 location.href = 'schema://公众号:iOS逆向' iOS9 之前,要在浏览器唤醒 App,我们通常使用 scheme...Universal Links 是标准 HTTP 或 HTTPS 链接,因此既适用于网站,也适用于应用程序。 如果未安装您的应用程序,则系统会在 Safari 打开URL,以使您的网站能够处理它。...也就是说,让新的apple-app-association生效的方式是可以将App再发一个版本 III、iOS防止WKWebView打开Universal Link Prevent universal...links from opening in WKWebView iOS防止WKWebView打开Universal Link ———————————————— 版权声明:本文为CSDN博主「#公众号

    87140
    领券