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

尝试基于WKWebView中的当前URL在外部打开PDF,但未触发decidePolicyForNavigationAction

基于WKWebView中的当前URL在外部打开PDF,但未触发decidePolicyForNavigationAction的问题,可能是由于以下原因导致的:

  1. WKWebView的配置问题:首先,需要确保WKWebView的配置允许加载PDF文件。可以通过设置WKWebViewConfiguration的preferences属性来实现,将preferences.allowFileAccessFromFileURLs属性设置为true,以允许从文件URL加载资源。另外,还需要确保preferences.allowUniversalAccessFromFileURLs属性也设置为true,以允许跨域访问资源。
  2. URL格式问题:检查当前URL是否正确指向PDF文件。确保URL的格式正确,并且指向的确实是一个PDF文件。
  3. 导航策略问题:在WKWebView中,可以通过实现WKNavigationDelegate的decidePolicyForNavigationAction方法来控制导航行为。如果未触发decidePolicyForNavigationAction方法,可能是因为没有正确设置WKWebView的navigationDelegate属性,或者没有实现decidePolicyForNavigationAction方法。

针对这个问题,可以尝试以下解决方案:

  1. 检查WKWebView的配置:确保WKWebViewConfiguration的preferences属性中的allowFileAccessFromFileURLs和allowUniversalAccessFromFileURLs属性都设置为true。
  2. 检查URL格式:确认当前URL是否正确指向PDF文件,并且可以通过浏览器或其他方式正常打开。
  3. 设置导航代理:在创建WKWebView实例时,设置其navigationDelegate属性为一个实现了WKNavigationDelegate协议的对象,并确保在该对象中实现了decidePolicyForNavigationAction方法。

示例代码如下:

代码语言:txt
复制
import UIKit
import WebKit

class ViewController: UIViewController, WKNavigationDelegate {
    var webView: WKWebView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let configuration = WKWebViewConfiguration()
        configuration.preferences.allowFileAccessFromFileURLs = true
        configuration.preferences.allowUniversalAccessFromFileURLs = true
        
        webView = WKWebView(frame: view.bounds, configuration: configuration)
        webView.navigationDelegate = self
        view.addSubview(webView)
        
        if let url = URL(string: "https://example.com/path/to/pdf.pdf") {
            let request = URLRequest(url: url)
            webView.load(request)
        }
    }
    
    // WKNavigationDelegate方法
    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
        // 在这里处理导航行为,例如判断是否是PDF文件并在外部打开
        if let url = navigationAction.request.url, url.absoluteString.hasSuffix(".pdf") {
            UIApplication.shared.open(url, options: [:], completionHandler: nil)
            decisionHandler(.cancel)
            return
        }
        
        decisionHandler(.allow)
    }
}

在上述示例代码中,首先创建了一个WKWebView实例,并设置了其navigationDelegate属性为当前视图控制器。然后,通过设置WKWebViewConfiguration的preferences属性,确保允许从文件URL加载资源。接下来,加载了一个URL指向PDF文件的请求。最后,在WKNavigationDelegate的decidePolicyForNavigationAction方法中,判断是否是PDF文件,并在外部打开。

对于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体品牌商,建议在腾讯云官方网站上查找相关产品和文档,以获取更详细的信息和链接地址。

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

相关·内容

分享超详细 WKWebView 开发和使用经验

通过 [WKWebView loadRequest:] 方法访问 index.html 的话,仅能访问当前页面所在目录下相对路径资源,无法访问目录外资源,例如上例,index.html 仅能访问...WKWebView 属性 webView 属性 title: 网页标题,一般为 html 内容 URL: 网页URL地址,为最终加载地址 loading:...更改前值 // NSKeyValueObservingOptionInitial 观察初始化值(注册观察服务时会调用一次触发方法) // NSKeyValueObservingOptionPrior...decidePolicyForNavigationAction 首先决定网页是否继续访问 可以通过 decidePolicyForNavigationAction decisionHandler...H5 需要打开新窗口操作,都会被这个方法拦截,例如 打开新窗口 window.open("

4.9K30

​# iOS WKWebView适配(基础篇)

webview可以指定从什么池子里打开,一般用默认或者指定一个单例WKProcessPool就行了 applicationNameForUserAgent 可以指定userAgentapplication...为了兼容iOS8js通信,也可以在这里拦截url做bridge分发 - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction...; ALLOGF(@"当前状态值:%ld;当前跳转地址:%@",statusCode,urlStr); } //允许跳转 decisionHandler(...,并决定是否拦截 实际应用过程由于涉及到第三方合作,所以基本采用全部放过+url白名单方式做控制 如果需要对证书做强校验,可以采用AFNetwork认证证书方式做比对 // 如果需要证书验证,与使用...]; 5.离线资源包一点思考 利用离线加载这一特性,我们可以通过服务端资源打包成本地资源包(zip包),通过服务器比对方式下载资源包,解压后放在本地指定沙盒目录,随后通过wkwebview加载本地方式打开页面

3.8K30
  • iOSWebView——WKWebView

    前言 iOS8,苹果推出了WKWebViewWKWebView有一个突出特点,就是内存占用少。 但作为一个全新WebView,API相比于之前UIWebView肯定会有所不同。...WKNavigationDelegate 如命名,这个是WKWebView导航代理。它控制了WKWebView加载一个页面流程各个关键时间节点。...此方法本质是,js会尝试加载某个URL,客户端加载前拦截这个URL,通过解析这个URL识别它内容,调用相应原生方法,并阻上浏览器加载这个URL。...所以我们decidePolicyForNavigationAction这个方法中进行拦截。...:nil]; cookie同步 WKWebview,cookie默认不再自动处理,我们需要手动根据自己需要,将cookie添加到请求

    3.5K20

    iOS防止WKWebView打开Universal Link

    如果未安装您应用程序,则系统会在 Safari 打开URL,以使您网站能够处理它。浏览器可以正常跳转,因此没装App时候,不会像schema出现网页无效框....Https 域名根目录下放这个文件apple-app-association,不带任何后缀 第一章节先来看看如何防止WKWebView打开Universal Link,如果你对如何获取Universal...Link感兴趣可看第二章节iOS 创建 Universal Links I 、防止WKWebView打开Universal Link demo下载地址:https://download.csdn.net.../download/u011018979/21361507 1.1 防止WKWebView打开Universal Link原理: 防止WKWebView打开Universal Link原理:...WKNavigationDelegate协议方法- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction

    3K30

    JSB 原理与实践

    端发消息实际效果: (本文所有 Demo 均运行在 iOS14.5 模拟器,WebView 容器采用 WKWebView 内核) 页面上半部分 UI 是由 HTML + CSS 渲染所得,是一个纯静态...可以看到当我们文本框输入下列字符并点击按钮后,h5 页面 id 为 test p 标签内容被修改了。...,曾经是最主流 JSB 实现方案,但目前高版本系统已经逐渐被淘汰,理由是它有如下几个劣势: 连续发送时可能会造成消息丢失(可以使用消息队列解决该问题) URL 字符串长度有限制 性能一般,URL...这一 delegate 实现请求拦截,解析 URL 参数,若 URL scheme 是 prek 则认为该请求是一个来自 Web JSB 调用: - (void)webView:(WKWebView...模拟器相册被打开了!

    1.4K10

    JSB 原理与实践

    端发消息实际效果: (本文所有 Demo 均运行在 iOS14.5 模拟器,WebView 容器采用 WKWebView 内核) 页面上半部分 UI 是由 HTML + CSS 渲染所得,是一个纯静态...可以看到当我们文本框输入下列字符并点击按钮后,h5 页面 id 为 test p 标签内容被修改了。...,曾经是最主流 JSB 实现方案,但目前高版本系统已经逐渐被淘汰,理由是它有如下几个劣势: 连续发送时可能会造成消息丢失(可以使用消息队列解决该问题) URL 字符串长度有限制 性能一般,URL...这一 delegate 实现请求拦截,解析 URL 参数,若 URL scheme 是 prek 则认为该请求是一个来自 Web JSB 调用: - (void)webView:(WKWebView...模拟器相册被打开了!

    3.3K40

    JSB 原理与实践

    端发消息实际效果: (本文所有 Demo 均运行在 iOS14.5 模拟器,WebView 容器采用 WKWebView 内核) ?...可以看到当我们文本框输入下列字符并点击按钮后,h5 页面 id 为 test p 标签内容被修改了。...; } 文本框输入 evaluateByNative(23333),来看一下调用结果: ?...,曾经是最主流 JSB 实现方案,但目前高版本系统已经逐渐被淘汰,理由是它有如下几个劣势: 连续发送时可能会造成消息丢失(可以使用消息队列解决该问题) URL 字符串长度有限制 性能一般,URL...这一 delegate 实现请求拦截,解析 URL 参数,若 URL scheme 是 prek 则认为该请求是一个来自 Web JSB 调用: - (void)webView:(WKWebView

    1.3K30

    WKWebView详解

    您可以使用WKWebView类来应用程序嵌入web内容,通过创建一个WKWebView对象,将其设置为视图,并发送一个请求来加载web内容。...从iOS 8.0和OS X 10.10开始,建议使WKWebView应用程序展示web内容,建议不要使用UIWebView或WebView。...每个任务必须至少调用一次这个方法 如果你尝试在任务完成后发送一个新response对象,会触发异常 如果在任务已经停止加载后调用,将会触发异常 为任务添加接收数据 - (void)didReceiveData...,将会触发异常 如果在任务已经停止加载后调用,将会触发异常 将任务标记为成功完成 - (void)didFinish; 如果你尝试发送response之前或者任务已经结束之后调用该方法,将会触发异常...*)webView; 决定是否允许或者取消一次页面加载请求 - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(

    20.6K193

    WKWebView

    WKWebView内存超过系统分配给它内存时候,WKWebView浏览器就会崩溃白屏,但是APP不会crash(APP会收到系统通知,并且尝试去重新加载页面)。...按指定因子缩放页面内容,并将结果居中指定点上。 导航 allowsBackForwardNavigationGestures。布尔值,指示水平滑动手势是否会触发后退列表导航,默认为NO。...3,WebKit是一个开源浏览器引擎,当前常见浏览器基本都是基于WebKit进行延伸。...创建并初始化一个WKWebView 设置WebViewnavigationDelegate、UIDelegate、configuration等 加载URL或者HTML字符串 相应代理方法回调处理业务逻辑...我们可以通过JSCore或者JSBridge来native执行JS代码,并且JS中去回调Native相关函数。 现在很火热跨平台以及热修复技术,都是基于JS与Native通信来实现

    6K20

    JS Bridge 通信原理

    URL Scheme URL Scheme 是一种特殊 URL,一般用于 Web 端唤醒 App,甚至跳转到 App 某个页面,比如在某个手机网站上付款时候,可以直接拉起支付宝支付页面。...编辑切换为居中 添加图片注释,不超过 140 字(可选) 这里有个常用 App URL Scheme 汇总:URL Schemes 收集整理 在手机里面打开这个页面后点击这里,就会提示你是否要打开微信。...我们常说 Deeplink 一般也是基于 URL Scheme 来实现。...WKWebView : - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(nonnull WKNavigationAction...比如我们调用 Native 弹窗功能,如果客户端没支持这个 Bridge,或者我们是浏览器里面打开这个页面,此时应该退出到使用 Web alert 弹窗。

    4.8K50

    WKWebView 那些坑

    WKWebView 中加载下面的测试链接可以稳定重现白屏现象: http://people.mozilla.org/~rnewman/fennec/mem.html 这个时候 WKWebView.URL...一些高内存消耗页面可能会频繁刷新当前页面,H5侧也要做相应适配操作。...实践发现 WKWebView 实例其实也会将 Cookie 存储于 NSHTTPCookieStorage ,但存储时机有延迟,iOS 8上,当页面跳转时候,当前页面的 Cookie 会写入 NSHTTPCookieStorage...工程师曾建议通过 reset WKProcessPool 来触发 Cookie 同步到 NSHTTPCookieStorage ,实践发现不起作用,并可能会引发当前页面 session cookie...id=138169 (复制链接到浏览器打开) 因此,如果通过 registerSchemeForCustomProtocol 注册了 http(s) scheme, 那么由 WKWebView 发起所有

    4.6K130
    领券