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

如何在UIWebView中关闭页面并返回应用程序

在UIWebView中关闭页面并返回应用程序,可以通过以下方法实现:

  1. 检测返回按钮的点击事件

在UIViewController中,可以通过重写navigationBar的返回按钮点击事件来实现返回到应用程序的功能。

代码语言:swift
复制
override func navigationBar(_ navigationBar: UINavigationBar, didPushItem button: UIBarButtonItem) {
    if navigationBar.topItem === button.item {
        // 返回到应用程序
    }
}
  1. 关闭UIWebView

在返回到应用程序的功能中,可以通过以下代码关闭UIWebView:

代码语言:swift
复制
webView.stopLoading()
webView.delegate = nil
webView.removeFromSuperview()
webView = nil
  1. 返回到应用程序

在关闭UIWebView后,可以通过以下代码返回到应用程序:

代码语言:swift
复制
navigationController?.popViewController(animated: true)

完整的代码示例如下:

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

class ViewController: UIViewController, WKNavigationDelegate {

    var webView: WKWebView!

    override func viewDidLoad() {
        super.viewDidLoad()

        let webConfiguration = WKWebViewConfiguration()
        webView = WKWebView(frame: .zero, configuration: webConfiguration)
        webView.navigationDelegate = self
        view.addSubview(webView)

        let myURL = URL(string:"https://www.example.com")
        let myRequest = URLRequest(url: myURL!)
        webView.load(myRequest)
    }

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        webView.frame = view.bounds
    }

    override func navigationBar(_ navigationBar: UINavigationBar, didPushItem button: UIBarButtonItem) {
        if navigationBar.topItem === button.item {
            // 返回到应用程序
            webView.stopLoading()
            webView.navigationDelegate = nil
            webView.removeFromSuperview()
            webView = nil
            navigationController?.popViewController(animated: true)
        }
    }
}

这样,在点击返回按钮时,UIWebView将被关闭并返回到应用程序。

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

相关·内容

何在 asp.net core 的中间件返回具体的页面

,允许我们通过可视化的方式完成某些操作或浏览某些数据 因为自己也需要实现类似的功能,虽然使用到的知识点很少、也很简单,但是在网上搜了搜也没有专门介绍这块的文档或文章,所以本篇文章就来说明如何在中间件返回页面...,如果你有类似的需求,希望可以对你有所帮助 Step by Step 最终实现的功能其实很简单,当用户跳转到某个指定的地址后,自定义的中间件通过匹配到该路径,从而返回指定的页面,所以这里主要会涉及到中间件是如何创建...上找到对应的文件夹,clone 下源代码,来看下是如何实现在中间件返回特定的页面 在 clone 下的代码,排除掉一些 c#、node.js 使用到的项目性文件,可以看到整个项目中的文件按照功能可以分为三大块.../index.html 时,将嵌入到程序集中的文件通过 stream 流的形式获取到,转换成字符串,再指定请求的响应的类型为 text/html,从而实现将页面返回给用户 public async Task...当完成了页面的呈现后,因为一般我们会创建一个单独的类库来实现这些功能,在页面,可能会包含前后端的数据交互,由于我们在宿主的 API 项目中已经完成了对于路由规则的设定,所以这里只需要在类库通过 nuget

1.9K20

判断js引擎是javascriptCore或者v8

来由   纯粹的无聊,一直在搜索JavaScriptCore和SpiderMonkey的一些信息,却无意中学习了如何在ios的UIWebView判断其js解析引擎的方法: if (window.devicePixelRatio...在之前的文章objC与js通信实现--WebViewJavascriptBridge,讲述了cordova的桥接机制-通过UIWebView的stringbyEvaluateJavascriptString...对比   1,在iOS通过UIWebView组件的stringByEvaluateJavascriptString:(NSString *)方法来调用。...但是这种方式有几个弊端:     1)oc调用js有返回值,属于同步调用;而js调用oc是通过创建iframe设置src,oc端的UIWebVIew拦截请求,然后再通过stringByEvaluateJavascriptString...控件中就为改webview对应的上下文,即使h5页面切换,上下文仍是不变,可以理解为一个单例。

3.3K50

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

参考文章:《UIWebView与WKWebView》 UIWebView 是苹果继承于 UIView 封装的一个加载 web 内容的类,它可以加载任何远端的web数据展示在你的页面上,你可以像浏览器一样前进后退刷新等操作...不过苹果在 iOS8 以后推出了 WKWebView 来加载 Web,应用于 iOS 和 OSX ,它取代了 UIWebView 和 WebView ,在两个平台上支持同一套 API。...检测 webView.title 是否为空 并不是所有 H5 页面白屏的时候都会调用上面的回调函数,比如,最近遇到在一个高内存消耗的 H5 页面上 present 系统相机,拍照完毕后返回原来页面的时候出现白屏现象...Android 应用程序的 WebView 配置为可调试模式。...代理就是在客户端和服务器之间设置一道关卡,客户端先将请求数据发送出去后,代理服务器会将数据包进行拦截,代理服务器再冒充客户端发送数据到服务器;同理,服务器将响应数据返回,代理服务器也会将数据拦截,再返回给客户端

3.1K00

UI篇- UIWebView使用大全

常用设置和方法的使用 1.UIWebView中使用到定位的话,APP的 info.plist中就要设置跟定位相关的属性值。...加载百度编译器编辑的HTML文本 ******** 使用UIWebView 加载 HTML图文文本 ********* //self.newsM.content为网络返回的原始图文信息。...根据导航类型参数可以得到请求发起的原因 //当网页视图被指示载入内容而得到通知应该返回是,这样会进行加载通过导航类型参数可以得到请求发起的原因,可以是以下任意值: - (BOOL)webView:(UIWebView...JS方法 与UIWebView进行交互,调用web页面的需要传参的函数时,参数需要带单引号,或者双引号(双引号需要进行转义在转义字符前加\),在传递json字符串时不需要加单引号或双引号: -(void...OC给JS传参数,如何在OC获取到JS传递过来的参数 如果要实现这样的JS和OC的数据交互,需要使用到一个第三方文件:WebViewJavascriptBridge 给web发消息 @property

1.9K10

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

不过苹果在 iOS8 以后推出了 WKWebView 来加载 Web,应用于 iOS 和 OSX ,它取代了 UIWebView 和 WebView ,在两个平台上支持同一套 API。...WKWebView 支持了更多的 HTML5 特性; WKWebView 高效的 app 和 web 信息交换通道; WKWebView 允许 JavaScript 的 Nitro 库加载使用, UIWebView...检测 webView.title 是否为空 并不是所有 H5 页面白屏的时候都会调用上面的回调函数,比如,最近遇到在一个高内存消耗的 H5 页面上 present 系统相机,拍照完毕后返回原来页面的时候出现白屏现象...Android 应用程序的 WebView 配置为可调试模式。...代理就是在客户端和服务器之间设置一道关卡,客户端先将请求数据发送出去后,代理服务器会将数据包进行拦截,代理服务器再冒充客户端发送数据到服务器;同理,服务器将响应数据返回,代理服务器也会将数据拦截,再返回给客户端

2.3K30

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

不过苹果在 iOS8 以后推出了 WKWebView 来加载 Web,应用于 iOS 和 OSX ,它取代了 UIWebView 和 WebView ,在两个平台上支持同一套 API。...检测 webView.title 是否为空 并不是所有 H5 页面白屏的时候都会调用上面的回调函数,比如,最近遇到在一个高内存消耗的 H5 页面上 present 系统相机,拍照完毕后返回原来页面的时候出现白屏现象...WKWebView 页面样式问题 在 WKWebView 适配过程,我们发现部分 H5 页面元素位置向下偏移或被拉伸变形,追踪后发现主要是 H5 页面高度值异常导致。...Android 应用程序的 WebView 配置为可调试模式。...代理就是在客户端和服务器之间设置一道关卡,客户端先将请求数据发送出去后,代理服务器会将数据包进行拦截,代理服务器再冒充客户端发送数据到服务器;同理,服务器将响应数据返回,代理服务器也会将数据拦截,再返回给客户端

2.6K20

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

不过苹果在 iOS8 以后推出了 WKWebView 来加载 Web,应用于 iOS 和 OSX ,它取代了 UIWebView 和 WebView ,在两个平台上支持同一套 API。...WKWebView 支持了更多的 HTML5 特性; WKWebView 高效的 app 和 web 信息交换通道; WKWebView 允许 JavaScript 的 Nitro 库加载使用, UIWebView...检测 webView.title 是否为空 并不是所有 H5 页面白屏的时候都会调用上面的回调函数,比如,最近遇到在一个高内存消耗的 H5 页面上 present 系统相机,拍照完毕后返回原来页面的时候出现白屏现象...Android 应用程序的 WebView 配置为可调试模式。...代理就是在客户端和服务器之间设置一道关卡,客户端先将请求数据发送出去后,代理服务器会将数据包进行拦截,代理服务器再冒充客户端发送数据到服务器;同理,服务器将响应数据返回,代理服务器也会将数据拦截,再返回给客户端

2.3K20

iOS监听H5页面goBack返回事件 & 网页监听APP返回键 (NavigationBackItemInjection)

1.1 UIWebView 监听H5页面goBack返回事件 1.2 WKWebView监听H5页面goBack返回事件 2.1 原理 2.2 例子 什么时候会触发这个返回事件?...target 在WKWebView的WKNavigationDelegate代理方法处理应用跳转 简单的处理WKWebView加载新页面 WKWebView显示JS弹框 WKWebView调用js方法...监听 estimatedProgress 引言 需求:原生app使用WebView 控制器加载H5页面进行信用卡申请 问题:用户点击残忍放弃之后,没有关闭当前控制器 重现场景:用户点击返回按钮,暂时提示框...back-forward列表的内容,相当于回到关闭的之前看过的详情界面。...监听H5页面goBack返回事件 UIWebView,可通过UIWebViewNavigationTypeBackForward来监听返回事件 - (BOOL)webView:(UIWebView

5.5K21

UIWebView 浏览器控件一、初始化与三种加载方式二、常用属性和方法三、代理方法 UIWebViewDelegate四、其它案例:

默认情况下UIWebView加载HTML页面后,会以页面的原始大小进行显示,亦即如果页面的大小超出UIWebView视口大小,UIWebView会出现滚动效果,而且用户只能通过滚动页面来查看不同区域的内容...,是JS执行OC代码的桥梁 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request...更加接近native(原生) 某些情况下,我们既想要UIWebView加载web页面,又想使得所加载的页面的外观和操作行为更加接近native感觉。...IOS,当你长按一个触控对象时,链接,safari会弹出包含链接信息的菜单。...IOS,在页面元素中进行长按操作,safari会弹出菜单,来允许进行选择行为。

1.4K60

iOS-JavaScript交互方案:网页监听APP返回键(goback)+APP监听网页返回键(JS调用OC对象方法)

1.网页监听APP返回键(原生goback) 假设需求:当APP点击原生导航栏左上角返回键时,APP并不返回上级VC,而是让UIWebView返回上级页面。...interface CMWebViewController : UIViewController 1.2 其次 建议基于UIViewController自建一个BackButtonHandler的分类,UIViewController...}]; } } } return NO; } 3.最后 在实现文件CMWebViewController.m导入如上分类,实现分类...(OC调用JS) 假设需求:APP隐藏原生导航栏,相当于网页全屏了,当在APP中点击网页端的左上角返回键时,APP退出UIWebView返回上级VC页面。...之后在回调JavaScript的方法Callback把内容传出去 dispatch_async(dispatch_get_main_queue(), ^{ //APP返回上级页面动作

4K30

网易严选的wkwebview测试之路

app和web信息交换通道   允许JavaScript的Nitro库加载使用,UIWebView限制了   提供加载网页进度的属性(estimatedProgress)   将UIWebViewDelegate...  以前UIWebView会自动去NSHTTPCookieStorage读取cookie,但是WKWebView并不会去读取,因此导致cookie丢失以及一系列问题,在测试的过程我们发现在一个活动页面触发了登录之后...,返回页面并没有同步到登录态的信息 ?   ...  在测试过程,替换wkwebview之后,很多APP内的H5页面样式出现了兼容的问题,尤其是针对iPhone X的适配方面,对此我们只能全局查看各种H5页面,一一检查页面是否错乱,大部分页面的问题都是页面底部或者导航栏异常...从上图可以明显的看出来,wk在内存消耗方面还是有显著的提升的,尤其是针对性能较差的机器,ios9系统的5s。

1.7K10

iOS WebView 的 Hybrid 框架设计

hybrid_params={params need encode}&callback=callback_ID 客户端需要根据约定,在 Bridge 处理结束后通过 WebView window 对象的...callback_ID 调用回调,数据返回的格式约定为: { data : {}, err : 0, //非0提示msg msg : "success or fail message" } Native...② H5 跳转新开 WebView 页面。 ③ H5 跳转 Native 页面。 H5 跳转新开 WebView 页面: 协议标准 hybrid_scheme://gotoWebview?...} } } }]; Header 组件设计 对于 Header 组件,需要完成以下功能: ① Header 的左侧具有返回键和关闭键...本文初衷是想为那些准备使用Hybrid框架的人提供设计上的思路,通过实际的事例去展示结果,希望对 Hybrid 感兴趣的朋友一起来把 Hybrid 一整套解决方案落地并且能够提供开源。

1.6K10

H5如何与原生App通信?

说白了UIWebView有类似浏览器的功能,我们使用可以它来打开页面做一些定制化的功能,可以让js调某个方法可以取到手机的GPS信息。...RN容器 在react-native开发,从rn 0.37版本开始官方引入了组件,在安卓调用原生浏览器,在IOS默认调用的是UIWebView容器。...会造成H5内页面滚动失效 h5向ios客户端发送消息; 在ios,并没有现成的api让js去调用native的方法,但是UIWebView与WKWebView能够拦截h5内发起的所有网络请求。...params=' + encodeURIComponent(obj)然后带上你要传递给ios的参数;然后在客户端内拦截到指定协议头的请求之后就阻止该请求解析url上的参数,执行相应逻辑 在H5发起这种特定协议的请求方式分两种...方法来实现的,该方法返回js脚本的执行结果。

5.8K20

iOS引入JavaScriptCore引擎框架(一)

oc端初始化一个js执行上下文JSContext对象很容易, [[JSContext alloc] init]即可,但是在hybrid app,通过这种方式初始化JSContext与承载页面UIWebVIew...在js层的全局属性我们可以访问该类,window.showjoyFad context[@"showjoyFad"]=sf; context[@"ViewController"] = self;...我做过一个测试:首先在UIWebView的webViewDidStartLoad阶段创建JSContext暴露oc端的方法,在加载一级页面时js正常调用oc的方法,而跳转到二级页面却无法执行oc的方法...其次,在webVIewDidFinishLoad阶段创建JSContext透出oc方法,由于加载js阶段在webVIewDidFinishLoad阶段之前,因此一级页面js无法调用oc方法,但是二级页面同理也是如此...而在js层则有两种方式来监测执行oc的方法: 1,在oc层的webVIewDidFinishLoad阶段,暴露oc接口之后,通过JSContext或者UIWebView的stringByEvluateJavascriptString

1.5K60
领券