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

关闭按钮的WKWebview弹出窗口?

关闭按钮的WKWebView弹出窗口是指在使用WKWebView进行网页浏览时,当网页中弹出一个新的窗口(例如弹出一个新的网页、打开一个新的链接等),在新窗口中通常会有一个关闭按钮,用于关闭该窗口并返回到原始的网页。

WKWebView是苹果推出的用于在iOS和macOS上显示网页内容的控件,它提供了更好的性能和功能支持。在WKWebView中,弹出窗口通常是通过JavaScript的window.open()方法触发的。

要实现关闭按钮的WKWebView弹出窗口,可以通过以下步骤进行操作:

  1. 在WKWebView的代理方法中,监听新窗口的请求。可以使用webView(_:createWebViewWith:for:windowFeatures:)方法来捕获新窗口的请求。
  2. 在该代理方法中,创建一个新的WKWebView实例,并将其添加到当前的视图层级中。
  3. 在新的WKWebView中,添加一个关闭按钮。可以使用UIButton或其他自定义的视图来实现关闭按钮的样式和功能。
  4. 当点击关闭按钮时,调用WKWebView的close()方法来关闭当前的窗口。

以下是一个示例代码,演示了如何实现关闭按钮的WKWebView弹出窗口:

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

class ViewController: UIViewController, WKUIDelegate, WKNavigationDelegate {
    
    var webView: WKWebView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let webConfiguration = WKWebViewConfiguration()
        webView = WKWebView(frame: view.bounds, configuration: webConfiguration)
        webView.uiDelegate = self
        webView.navigationDelegate = self
        view.addSubview(webView)
        
        let url = URL(string: "https://example.com")
        let request = URLRequest(url: url!)
        webView.load(request)
    }
    
    // WKNavigationDelegate method to handle new window requests
    func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
        if navigationAction.targetFrame == nil {
            let newWebView = WKWebView(frame: view.bounds, configuration: configuration)
            newWebView.uiDelegate = self
            newWebView.navigationDelegate = self
            view.addSubview(newWebView)
            
            let closeButton = UIButton(frame: CGRect(x: 10, y: 10, width: 50, height: 50))
            closeButton.setTitle("Close", for: .normal)
            closeButton.addTarget(self, action: #selector(closeButtonTapped), for: .touchUpInside)
            newWebView.addSubview(closeButton)
            
            return newWebView
        }
        return nil
    }
    
    @objc func closeButtonTapped() {
        webView.close()
    }
}

在上述示例代码中,我们创建了一个WKWebView实例,并在其代理方法webView(_:createWebViewWith:for:windowFeatures:)中创建了一个新的WKWebView实例。在新的WKWebView中,我们添加了一个关闭按钮,并为其添加了点击事件,点击按钮时调用close()方法关闭当前窗口。

这样,当WKWebView中弹出一个新窗口时,新窗口中会显示一个关闭按钮,点击该按钮即可关闭窗口。

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

相关·内容

WPF 解决弹出模态窗口关闭后,主窗口不在最前

本文告诉大家如何解决这个问题,在 WPF 的软件,弹出一个模态窗口。使用另一个窗口在模态窗口前面。从任务栏打开模态窗口。关闭模态窗口。这时发现,主窗口会在刚才使用的另一个窗口下面。...因为模态窗口会在关闭的时候,让主窗口不在最前,所以团队不敢使用模态窗口。 但是这个问题在看了 Windows 历史之后,才发现这个问题是 Windows 的问题。...在窗口关闭的时候,Windows 会找一个在这个窗口下方的第一个可用的窗口,激活他。因为弹出模态窗口的主窗口是被禁用的。...所以在模态窗口关闭的时候,就忽略了主窗口可以激活,于是找到主窗口下方的一个可以被激活的窗口,这时激活他,于是这个被找到的窗口就在主窗口的上面。 那么这个问题可以如何解决?...参见 关闭模态窗口后,父窗口居然跑到了其他窗口的后面 ----

14.8K20
  • WPF 解决弹出模态窗口关闭后,主窗口不在最前

    本文告诉大家如何解决这个问题,在 WPF 的软件,弹出一个模态窗口。使用另一个窗口在模态窗口前面。从任务栏打开模态窗口。关闭模态窗口。这时发现,主窗口会在刚才使用的另一个窗口下面。...因为模态窗口会在关闭的时候,让主窗口不在最前,所以团队不敢使用模态窗口。 但是这个问题在看了 Windows 历史之后,才发现这个问题是 Windows 的问题。...在窗口关闭的时候,Windows 会找一个在这个窗口下方的第一个可用的窗口,激活他。因为弹出模态窗口的主窗口是被禁用的。...所以在模态窗口关闭的时候,就忽略了主窗口可以激活,于是找到主窗口下方的一个可以被激活的窗口,这时激活他,于是这个被找到的窗口就在主窗口的上面。 那么这个问题可以如何解决?...参见 关闭模态窗口后,父窗口居然跑到了其他窗口的后面

    5.3K30

    WPF 解决弹出模态窗口关闭后,主窗口不在最前

    本文告诉大家如何解决这个问题,在 WPF 的软件,弹出一个模态窗口。使用另一个窗口在模态窗口前面。从任务栏打开模态窗口。关闭模态窗口。这时发现,主窗口会在刚才使用的另一个窗口下面。...因为模态窗口会在关闭的时候,让主窗口不在最前,所以团队不敢使用模态窗口。 但是这个问题在看了 Windows 历史之后,才发现这个问题是 Windows 的问题。...在窗口关闭的时候,Windows 会找一个在这个窗口下方的第一个可用的窗口,激活他。因为弹出模态窗口的主窗口是被禁用的。...所以在模态窗口关闭的时候,就忽略了主窗口可以激活,于是找到主窗口下方的一个可以被激活的窗口,这时激活他,于是这个被找到的窗口就在主窗口的上面。 那么这个问题可以如何解决?...参见 关闭模态窗口后,父窗口居然跑到了其他窗口的后面

    5.8K10

    在 Windows 11 上关闭弹出窗口最正确方法

    此外,没有一种可靠的方法可以通过单击摆脱所有弹出窗口。在 Windows 11 上,若要消除弹出窗口,需要针对特定类型的弹出窗口进行关闭。...幸运的是,我们编制了一份列表,列出您需要关闭以消除 Windows 11 上的弹出窗口的所有通知和警报.这是你可以做到的。...在 Windows 11 上停止弹出窗口的 8 种方法(分步教程) 要停止 Windows 11 上的弹出窗口,您可以选择关闭通知、启用焦点模式或禁用警报。这些方法中的每一种都有其优点和缺点。...关闭 OEM 应用通知 如果您不想通过完全关闭来自应用程序的通知来错过重要更新,您可能至少希望停止从您的 PC 制造商安装的应用程序中获取弹出窗口。...现在,关闭“让应用程序使用我的广告 ID 向我展示个性化广告”。 方法 4:禁用浏览器中的弹出窗口 自互联网早期以来,弹出窗口一直是浏览器中的一个突出烦恼。

    1.2K10

    QT对话框去掉帮助和关闭按钮 拦截QT关闭窗口的CloseEvent

    建了一个对话框,我不想把边框去掉,只想去掉关闭按钮, setWindowFlags(windowFlags()&~Qt::WindowCloseButtonHint&~Qt::WindowContextHelpButtonHint...); 结果那个问号的按钮去掉了,但是关闭按钮还在,求助啊 setWindowFlags(Qt::WindowTitleHint | Qt::CustomizeWindowHint | Qt::WindowMinimizeButtonHint...类下有一个虚函数 void QDialog::closeEvent (  QCloseEvent   *  e   )  [virtual protected] 通过实现closeEvent函数,就可以以对关闭窗口消息进行拦截...,比如程序还没有完成工作时,可以弹出警告窗口,即使用户确认退出操作 在头文件中,需要加入#include : #ifndef TEST_H #define TEST_H...QDialog {     Q_OBJECT public:     ClientTest();     void closeEvent(QCloseEvent *event);  //后边的具体实现省略

    7.4K20

    layer弹出层的关闭问题

    就是在执行添加或修改的时候,需要将数据提交到后台进行处理,这时候添加成功之后最理想的状态是关闭弹出层并且刷新列表的数据信息,之前一直想实现这样,可一直没有成功,今天决定好好弄一弄,在仔细看过layer的帮助手册以及查阅资料之后...,有了以下的解决办法: 一、关闭弹出窗   这是layer官网给出的帮助手册,讲解的比较详细 分成两种情况: 1、弹出层不是新的页面的时候,直接获得该弹窗的索引,然后执行close方法 layer.close...(); 2、弹出窗是新的页面的时候 var index=parent.layer.getFrameIndex(window.name); parent.layer.close(index); 二、关闭弹窗之后刷新父页面...  例如:在增加用户的时候,增加会弹出一个新的弹窗页面,增加成功之后会有提示性的小的alert,在点击确定之后,弹窗页面关闭,并且刷新用户列表的页面数据。   ...只需要在关闭弹窗的时候加这个window.parent.location.reload();//刷新父页面 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/113462

    1.7K30

    jQuery的弹出窗口插件colorbox

    Example:$(‘h1’).colorbox({href:”welcome.html”}) 这个用来设置一个锚标记的值或者一个不是锚的元素,例如图像或者表单的按钮,例如: title false...”, “500px”, or 500 设置高度,包括边框和按钮 innerWidth false Example: “50%”, “500px”, or 500 这个可以设定一个固定的内大小,包括边框和按钮...,ColorBox会自动预载要显示图片 overlayClose true 为true单击遮罩层就可以把ColorBox关闭 slideshow false 为True,会自动滚动图片 slideshowSpeed...“stop slideshow” 停止自动滑动按钮的文本 current “{current} of {total}” 文本内容:现在正在显示的元素序号 previous “previous” “上一个...”按钮的文本 next “next” “下一个”按钮的文本 close “close” “关闭”按钮的文本

    5.5K41

    关闭模态窗口后,父窗口居然跑到了其他窗口的后面

    然而却一直有一个难缠的 BUG:当关闭模态窗口时,父窗口有时会跑到其他程序窗口的后面! 而最近读到了微软工程师写过的话之后,明白了这个 BUG 的产生缘由以及解决方法。 ---- 这是什么 BUG?...弹出一个模态窗口,然后将模态窗口的父窗口设置为自身窗口; 切换到其他程序窗口中(比如 Windows 资源管理器窗口); 切换回此模态窗口,然后关闭这个模态窗口上。...你会发现,模态窗口关闭后,父窗口并没有回到当前的顶层显示中。取而代之的,是其他程序的窗口(比如 Windows 资源管理器窗口)。...用一张图来描述这个 BUG,将是这样的: 有这两个窗口,其中右边那个是我们开发的: ? 我们的窗口在资源管理器上面。然后,我们弹出模态子窗口: ? 现在,我们操作一下资源管理器: ?...为解决兼容性问题的微软工程师默哀一分钟…… 我曾经尝试在模态子窗口关闭后激活一下父窗口,但这样会导致窗口的层级闪烁一下(Windows 资源管理器会短暂地显示到我们的窗口之上)。

    9.4K20

    js实现网页弹出窗口的代码详细教程

    经常上网的朋友可能会到过这样一些网站,一进入首页立刻会弹出一个窗口,或者按一个连接或按钮弹出,通常在这个窗口里会显示一些注意事项、版权信息、警告、欢迎光顾之类的话或者作者想要特别提示的信息。...方法四:用一个按钮调用: <input type="button" value="打开窗口"> 【4、同时弹出2个窗口】 对源代码稍微改动一下: 弹出的窗口之定时关闭控制】 下面我们再对弹出的窗口进行一些控制,效果就更好了。如果我们再将一小段代码加入弹出的页面(注意是加入到page.html的html中,可不是主页面中,否则...)...这一句的作用是调用关闭窗口的代码,10秒钟后就自行关闭该窗口。)...【7、在弹出窗口中加上一个关闭按钮】 关闭' > 呵呵,现在更加完美了!

    27.2K50

    ViewWizard 查看弹出窗口来源的小工具

    比如下面这个来自网友的例子: 虽然提供了关闭按钮,但它如果不定时的弹出也会让人非常恼火,最重要的是我们不知道究竟是什么软件引发了这个弹窗。...不过有了 ViewWizard 窗口信息查看精灵这款绿色软件之后,定位窗口来源变得易如反掌。只要广告窗口还未关闭,我们便可以对他进行寻根溯源。...在打开软件后我们首先需要点击扩展按钮,将扩展信息栏展开,便于后续查看“进程路径”和“模块路径”。...然后拖动 ViewWizard 上的放大镜到弹出窗口上,松开鼠标后我们便可以在“进程路径”和“模块路径”中看到是谁在暗中作祟了。如图所示,很明显指向了阿里旺旺的安装目录。...或者也可以使用知乎网友提供的绿色版弹窗拦截软件 adkiller 。 最后附上 ViewWizard 窗口信息查看精灵的下载地址,虽然最新版已经更新到3.x,但是实测2.x在 win10 上运行良好。

    5.8K20

    【记录】使用python图形库打开新窗口时候关闭之前的窗口,运行结束后关闭当前窗口和程序

    代码图片展示 代码展示 import subprocess import sys # 导入sys模块 def open_buy_quantity(): # 运行购买数量.py文件 # 关闭当前窗口...Tkinter 库和 subprocess 模块来实现在 tkinter 窗口中打开另一个 Python 脚本的过程,并在脚本运行结束后关闭当前窗口和程序。...在你的代码中,你使用了 Tkinter 创建了一个名为 window 的主窗口,并在 open_buy_quantity 函数中调用了 window.destroy() 方法来关闭当前窗口。...这是一个简单的 GUI 应用示例,展示了如何创建窗口和关闭窗口。 subprocess 模块: subprocess 模块允许你在 Python 程序中启动新的进程。...在你的代码中,你使用了 subprocess.run(["python", "D:/桌面/python项目/购买数量.py"]) 来运行名为 "购买数量.py" 的 Python 脚本。

    17810

    关闭StackExchange等平台的privacy收集窗口

    技术背景 当我们打开一个StackExchange页面的时候,经常会出现一个很大的privacy收集窗口,而且不管怎么点都关闭不了,比如像下图这样: image.png 如果屏幕足够大,影响可能也不是很大...点击F12按钮,进入开发者模式。 3. 点击操作栏的第一个带箭头的选择按钮。 4. 选中privacy的收集窗口,发现其变颜色,然后单击变颜色的部分。 5....在开发者窗口中弹出的新模块中找到position标签,鼠标移上去会出现一个打勾的选中方框。 6. 点击选中方框,就可以取消privacy窗口的固定,界面上就看不见该收集窗口。...但是很多类似的网站界面打开后总是有一个privacy收集的窗口无法关闭,在很大情况下影响了我们平时的阅读。...因此我们通过前端的屏蔽方法,可以取消privacy位置收集窗口的固定,从而达到隐藏privacy收集窗口的目的。

    1.5K30
    领券