首页
学习
活动
专区
工具
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:禁用浏览器中弹出窗口 自互联网早期以来,弹出窗口一直是浏览器中一个突出烦恼。

    53010

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

    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个窗口】 对源代码稍微改动一下: <script language="...【6、<em>弹出</em><em>的</em><em>窗口</em>之定时<em>关闭</em>控制】 下面我们再对<em>弹出</em><em>的</em><em>窗口</em>进行一些控制,效果就更好了。如果我们再将一小段代码加入<em>弹出</em><em>的</em>页面(注意是加入到page.html<em>的</em>html中,可不是主页面中,否则...)...这一句<em>的</em>作用是调用<em>关闭</em><em>窗口</em><em>的</em>代码,10秒钟后就自行<em>关闭</em>该<em>窗口</em>。)...【7、在<em>弹出</em><em>窗口</em>中加上一个<em>关闭</em><em>按钮</em>】 呵呵,现在更加完美了!

    27K50

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

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

    5.6K20

    【记录】使用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 脚本。

    16510

    关闭StackExchange等平台privacy收集窗口

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

    1.5K30
    领券