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

【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。...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.6K20

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

iOS的WebView——WKWebView

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

3.2K20

技术 | 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就没有这么方便的办法了。

83730

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.3K10

小明带你看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

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.2K30

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.6K40

iOS下JS与原生OC互相调用(总结)

JS的firstClick,拦截到的url scheme全都被转化为小写。 2.html需要设置编码,否则中文参数可能会出现编码问题。...系统做了改动,现在(iOS9,Xcode 7.3,去年使用Xcode 6 和iOS 8没有线程问题)测试,block子线程,因此执行UI操作,控制台有警告,需要回到主线程再操作UI。...同理,耗时较长的js 方法也可以放到setTimeout 。...iOS下JS与OC互相调用(一)--UIWebView 拦截URL iOS下JS与OC互相调用(二)--WKWebView 拦截URL iOS下JS与OC互相调用(三)--MessageHandler...(六)--WKWebView + WebViewJavascriptBridge iOS下JS与OC互相调用(七)--Cordova 基础 iOS下JS与OC互相调用(八)--Cordova详解+实战

4.9K30

关于Session与Cookie

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

33410

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发起这种特定协议的请求方式分两种

5.8K20

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的方式是没办法进行的。

5.3K10

NSURLPtotocol 网络hooker

如果不是这些类发出的请求,NSURLProtocol就没办法拦截和监听了。...相对应的也有unregistClass方法,不让某个子类起作用,这个起作用的时候并不是一定要在appDelegate,你想要他什么时候起作用,某个请求之前注册他就行,相应的不想他起作用就unregist...死循环的坑 有没有看到这两句代码? 这两句是为了防止死循环的,也是NSURLProtocol里必须写的方法。...所以我们startLoading里面,我们对这个request进行标记,标记他已经被处理过了,然后canInitWithRequest方法根据这个标记拿到这个request,如果被标记了,就不再次进行处理了...WKWebView不起作用,因为WKWebView走得是WebKit内核,不走苹果这一套逻辑,目前貌似还没有有效的解决方法。

37320
领券