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

在iOS 11中,有没有办法阻止拖放到WKWebView中?

在iOS 11中,可以通过设置WKWebView的UIDropInteractionDelegate来阻止拖放操作。具体步骤如下:

  1. 创建一个遵循UIDropInteractionDelegate协议的对象,例如命名为dropDelegate。
  2. 在WKWebView的初始化代码中,为WKWebView对象添加一个UIDropInteraction,并将dropDelegate设置为其代理。
  3. 在dropDelegate中实现以下方法:
    • canHandleSession(_:): 返回一个布尔值,指示是否可以处理给定的拖放会话。
    • dropSessionDidEnter(_:): 拖放会话进入时调用的方法。
    • dropSessionDidUpdate(_:): 拖放会话更新时调用的方法。
    • dropSessionDidExit(_:): 拖放会话退出时调用的方法。
    • performDrop(_:): 执行拖放操作时调用的方法。
    • dropSessionDidEnd(_:): 拖放会话结束时调用的方法。

通过实现以上方法,可以自定义拖放操作的行为,包括阻止拖放到WKWebView中。具体实现代码如下:

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

class ViewController: UIViewController, UIDropInteractionDelegate {
    var webView: WKWebView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 创建WKWebView对象
        webView = WKWebView(frame: view.bounds)
        
        // 添加UIDropInteraction,并设置代理为self
        webView.addInteraction(UIDropInteraction(delegate: self))
        
        // 将WKWebView添加到视图中
        view.addSubview(webView)
    }
    
    // MARK: - UIDropInteractionDelegate
    
    func dropInteraction(_ interaction: UIDropInteraction, canHandle session: UIDropSession) -> Bool {
        // 返回false,阻止拖放操作
        return false
    }
    
    func dropInteraction(_ interaction: UIDropInteraction, sessionDidEnter session: UIDropSession) {
        // 拖放会话进入时的操作
    }
    
    func dropInteraction(_ interaction: UIDropInteraction, sessionDidUpdate session: UIDropSession) -> UIDropProposal {
        // 拖放会话更新时的操作
        return UIDropProposal(operation: .cancel)
    }
    
    func dropInteraction(_ interaction: UIDropInteraction, sessionDidExit session: UIDropSession) {
        // 拖放会话退出时的操作
    }
    
    func dropInteraction(_ interaction: UIDropInteraction, performDrop session: UIDropSession) {
        // 执行拖放操作时的操作
    }
    
    func dropInteraction(_ interaction: UIDropInteraction, sessionDidEnd session: UIDropSession) {
        // 拖放会话结束时的操作
    }
}

这样,通过设置canHandleSession方法返回false,即可阻止拖放到WKWebView中。

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

相关·内容

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

不过苹果在 iOS8 以后推出了 WKWebView 来加载 Web,并应用于 iOS 和 OSX 中,它取代了 UIWebView 和 WebView ,在两个平台上支持同一套 API。...js 的交互; 注意: 大多数App需要支持 iOS7 以上的版本,而 WKWebView 只在 iOS8 后才能用,所以需要一个兼容性方案,既 iOS7 下用 UIWebView ,iOS8 后用...实践发现 WKWebView 实例其实也会将 Cookie 存储于 NSHTTPCookieStorage 中,但存储时机有延迟,在 iOS 8上,当页面跳转的时候,当前页面的 Cookie 会写入 NSHTTPCookieStorage...解决办法1: WKWebView loadRequest 前,在 request header 中设置 Cookie, 解决首个请求 Cookie 带不上的问题; 解决办法2: 通过 document.cookie...解决办法: 由于 WKWebView 在独立进程里执行网络请求。

3.2K00
  • Hybrid App 应用开发中 9 个必备知识点复习

    不过苹果在 iOS8 以后推出了 WKWebView 来加载 Web,并应用于 iOS 和 OSX 中,它取代了 UIWebView 和 WebView ,在两个平台上支持同一套 API。...js 的交互; 注意: 大多数App需要支持 iOS7 以上的版本,而 WKWebView 只在 iOS8 后才能用,所以需要一个兼容性方案,既 iOS7 下用 UIWebView , iOS8...实践发现 WKWebView 实例其实也会将 Cookie 存储于 NSHTTPCookieStorage 中,但存储时机有延迟,在 iOS8上,当页面跳转的时候,当前页面的 Cookie 会写入 NSHTTPCookieStorage...解决办法1: WKWebViewloadRequest 前,在 request header 中设置 Cookie, 解决首个请求 Cookie 带不上的问题; 解决办法2: 通过 document.cookie...解决办法: 由于 WKWebView 在独立进程里执行网络请求。

    2.7K20

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

    不过苹果在 iOS8 以后推出了 WKWebView 来加载 Web,并应用于 iOS 和 OSX 中,它取代了 UIWebView 和 WebView ,在两个平台上支持同一套 API。...: 大多数App需要支持 iOS7 以上的版本,而 WKWebView 只在 iOS8 后才能用,所以需要一个兼容性方案,既 iOS7 下用 UIWebView , iOS8 后用 WKWebView...实践发现 WKWebView 实例其实也会将 Cookie 存储于 NSHTTPCookieStorage 中,但存储时机有延迟,在 iOS8上,当页面跳转的时候,当前页面的 Cookie 会写入 NSHTTPCookieStorage...解决办法1: WKWebViewloadRequest 前,在 request header 中设置 Cookie, 解决首个请求 Cookie 带不上的问题; 解决办法2: 通过 document.cookie...解决办法: 由于 WKWebView 在独立进程里执行网络请求。

    2.3K20

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

    不过苹果在 iOS8 以后推出了 WKWebView 来加载 Web,并应用于 iOS 和 OSX 中,它取代了 UIWebView 和 WebView ,在两个平台上支持同一套 API。...: 大多数App需要支持 iOS7 以上的版本,而 WKWebView 只在 iOS8 后才能用,所以需要一个兼容性方案,既 iOS7 下用 UIWebView , iOS8 后用 WKWebView...实践发现 WKWebView 实例其实也会将 Cookie 存储于 NSHTTPCookieStorage 中,但存储时机有延迟,在 iOS8上,当页面跳转的时候,当前页面的 Cookie 会写入 NSHTTPCookieStorage...解决办法1: WKWebViewloadRequest 前,在 request header 中设置 Cookie, 解决首个请求 Cookie 带不上的问题; 解决办法2: 通过 document.cookie...解决办法: 由于 WKWebView 在独立进程里执行网络请求。

    2.3K30

    测试匠谈 | 微信H5兼容性测试理论和实践经验

    有没有办法通过最小化测试完成99%以上设备的CSS、JS API测试呢?测试方法与实践做在测试之前首先,不指望测试阶段解决所有的问题,在开发时就需要考虑兼容性。...它允许开发者在不同浏览器上同时运行测试,以检测网页在不同环境中的兼容性问题。...WKWebView (微信2017年3月1日前逐步升级为WKWebView) 是苹果在iOS 8中引入的新组件,目的是提供一个现代的支持最新Webkit功能的网页浏览控件,摆脱过去 UIWebView的老...WKWebView支持,且iOS 13即之后的所有苹果应用只支持WKWebView。...② 测试方法在实际业务中,几乎没有用户反馈Android微信内置浏览器的兼容问题,很多iOS表现不好的API,在Android上却表现的非常优秀和正常,但我们还是要做相关的测试。

    11510

    iOS的WebView——WKWebView

    前言 在iOS8中,苹果推出了WKWebView。WKWebView有一个突出特点,就是内存占用少。 但作为一个全新的WebView,API相比于之前的UIWebView肯定会有所不同。...WKWebView的设置 WKWebView的主要设置项都在configuration成员中(比如是否允许浏览器手指缩放,h5的浏览器能否自动播放等)这些都属于浏览器本身的设置项。...在此列举几项及其作用,由于类目繁多,会有遗漏,真正需要使用时,可以在xcode的help中寻找,查阅。...[self.webview.configuration allowsPictureInPictureMediaPlayback]; // 网页中的多媒体是否需要手势才能开始播放(iOS 10)...WKNavigationDelegate 如命名,这个是WKWebView的导航的代理。它控制了WKWebView在加载一个页面流程中的各个关键时间节点的。

    3.6K20

    技术 | Hybrid载体的变化(一)

    从iOS的角度上来说载体从UIWebView变成了WKWebView,Android有着他们自研的X5当然原生的内核,如果你用着Android7.0也不见得会卡,这才是小程序能出来的根本原因,没有载体,...今天,我们谈一谈iOS的载体“WKWebView”,有兴趣的朋友可以直接阅读:https://developer.apple.com/reference/webkit/wkwebview ,当然你也可以接着往下看...,我对于他的理解,苹果在iOS8中推出的新框架“Webkit”,其中WKWebView就是用来替换原来的UIWebView,一句话,你用它原来UIWebView出现的各种问题都被解决了。...在初始化WKWebView时你还需要配置一个Conf,这个Conf中你可以添加一个属性,这个属性在JavaScript这一边你可以通过window.webkit.messageHandlers.icepyApp...辅助我们做了很多这样的类型转换的事情,如果是UIWebView就没有这么方便的办法了。

    87130

    iPhone页面的常用调试方法

    在iPhone中调试,大体上与上文 安卓中的移动页面调试 类似,区别主要是iOS系统中的一些限制,导致某些工具无法使用。 本文基于此,简要介绍在iPhone中如何调试页面。...WKWebView 在Windows中结合Fiddler与ios_webkit_debug_proxy中转实现Chrome调试手机的Safari浏览器 一、能够访问页面 某些页面需要设置HOST才能进行访问...不过对于iPhone的调试,还需要进行真机的页面查看 一般来说,iPhone中的页面是在Safari浏览器中查看的 微信中的内置浏览器是WKWebView内核或 UIWebView ,WKWebView...基于 ios-webkit-debug-proxy 的调试 Mac上的safari调试功能不够好,而且不能调试微信中的页面,使用weinre只能简单地调试微信页面,无法进行脚本断点等高级功能 最好的办法莫过于让...,放到XCode的包目录中 安装成功后一直停留在启动画面 可能是XCode开启了调试断点功能,取消即可 安装之后原有微信应用打不开了,如果使用不恰当的ipa包,会有意外的副作用,所以得谨慎选择ipa包

    3.4K10

    NSURLProtocol 对 WKWebView 的处理

    ,但是对于 WKWebview 里面所发出的请求即使他是 http/https 也无能为力,先来简单的了解下 WKWebView. # WKWebview iOS8 以后,苹果推出了新框架 Webkit...# WebKit 源码分析 由于 WKWebview 是基于 webkit 内核来做的,所以我们在使用的时候需要导入一个这样的东西。...拉下代码直接搜索 NSURLProtocol,看看有没有有关的信息 看来的确是有和 NSURLProtocol 有关系,后面通过断点的调用栈中也找到了 + [NSURLProtocol canInitWithRequest...:] 这样的字样,再通过网上查一些资料也证实了我的猜想,其实 WKWebview 在一开始时候是会调用到 NSURLProtocol 中的入口方法 canInitWithRequest 的,但是就没有然后了...,也就是说 WKWebview 是和 NSURLProtocol 有一定关联,只是在 NSURLProtocol 的入口处返回 NO 所以导致 NSURLProtocol 不接管 WKWebview 的请求

    1.4K30

    小明带你看WWDC 2017(day3实况)

    如昨天所述,NLP是建立在Core ML的基础之上,使用Machine Learning来实现语言处理。具体的API在已有的NSLinguisticTagger中做了扩展。...session中也给了大概结论,如下图: ? 在子线程做异步处理看起来是问题不大的。...有没有觉得原来不可以想象的事情,随着Machine Learning的普遍应用,通过苹果的良好封装,都变得如此的简单。 3....最后有一些零散的信息分享: TestFlight将在今年晚些时候放大人数限制到1万; iOS11的Phased Release支持上架时指定灰度,按苹果固定放量规则进行放量自动更新,需要注意的是这个灰度对于手动在商城点击更新的用户无效...这也是一个大大的进步了,可以很大程度上解决iOS APP灰度的问题; HEVC即H265, JEIF也是一个13年MPEG定义的标准,于15年定稿,苹果在新系统中率先对两者做了支持。

    1.4K100

    MessageHandler 高级用法一:封装MessageHandler

    在iOS中 JS 和原生APP交互有许多种方法 WebViewJavascriptBridge 是我用的比较多的一个库,但是 WebViewJavascriptBridge 中在使用时最大的一个缺点就是...内部的处理类 这就造成了对原始的调用方法有一定的影响 WKWebView iOS 8 之后,无疑没有理由不使用 WKWebView 在 JS 端只需要 window.webkit.messageHandler...-> Void open weak var webView: WKWebView?...当然也可以直接使用 cocoapod 使用 pod 'WKJSHandler' 安装 当然现在实现了 JS 和 Native 之间的直接方法的调用,并且实现了参数的传递 但是我们并不会满足于此,因为在实际的使用中...,我们多数时候需要从Native 中获取一些数据,这个时候使用 postMessage 的方法,便不能够满足我们的需求了 通过 postMessage 只能够调用APP的一个方法,并且传参,没有办法直接回调

    2.8K40

    关于Session与Cookie

    Cookie cookie 是存储在浏览器端的信息,以一串文本形式存在,存储的容量有限,大约为 4KB;我们可以通过 cookie 保存一些登录相关的账号密码等信息,并且我们可以人工的去编辑、阻止或者删除它...存储在硬盘上的 cookie 可以在不同的浏览器进程间共享,比如两个浏览器窗口。而对于保存在内存里的 cookie,不同的浏览器有不同的处理方式。...cookie 在本地的存储格式为 key=value;key1=value1 有点类似于 map 的键值对,每个键值对之间用;号隔开,同时不允许键、值中出现分号(;)、逗号(,)、等号(=)以及空格;如果值中需要出现上述特殊字符...、UIWebView 其实本身也是一种浏览器壳子,拿 iOS 的 WKWebView 举个 ,使用下列代码可以获得 WkWebView 的 Cookie; if #available(iOS 11.0...session.invalidate(); //销毁session对象,所有属性删除 session.removeAttribute("currentName"); //删除某个session属性 在实际开发中

    36110

    H5如何与原生App通信?

    幸运的是,苹果发布iOS8的时候,新增了一个WKWebView组件容器,如果你的APP只考虑支持iOS8及以上版本,那么你就可以使用这个新的浏览器控件了。...RN容器 在react-native开发中,从rn 0.37版本开始官方引入了组件,在安卓中调用原生浏览器,在IOS中默认调用的是UIWebView容器。...从IOS12开始,苹果正式弃用UIWebView,统一采用WKWebView。...m.douyu.com' }} /> WebView组件不要嵌套在或原生点击组件中,会造成H5内页面滚动失效 h5向ios客户端发送消息; 在ios中,并没有现成的api让js去调用native的方法,...params=' + encodeURIComponent(obj)然后带上你要传递给ios的参数;然后在客户端内拦截到指定协议头的请求之后就阻止该请求并解析url上的参数,执行相应逻辑 在H5中发起这种特定协议的请求方式分两种

    6.1K20

    APP内嵌H5页面中JS和APP的交互解决方案(可传参、可回调)

    前言 项目的快速迭代过程中,APP中嵌入H5页面已是很常见的做法。 一定会有APP和JS的交互场景,例如JS唤起APP并携带参数......data=xxx' 存在的问题: 有些方案为了规避 url 长度隐患的缺陷,在 iOS 上采用了使用 Ajax 发送同域请求的方式,并将参数放到 head 或 body 里。...这样,虽然规避了 url 长度的隐患,但是 WKWebView 并不支持这样的方式。 为什么选择 iframe.src 不选择 locaiton.href ?...连续多次修改window.location.href的值,在Native层只能接收到最后一次请求,前面的请求都会被忽略掉。 只解决了js调用原生的问题。...至于调用的结果和调用完之后要进行一些页面的回调,通过这个拦截url的方式是没办法进行的。

    6.8K10
    领券