Xamarin iOS:关闭跳转视图后WebView内弹窗仍显示,求隐藏方法
iOS开发(Xamarin)问题:关闭原生视图后WebView内弹窗未隐藏
我是iOS开发(Xamarin)新手,需求是点击WebView内弹窗中的链接时显示一个原生视图(弹窗截图)。
实现显示视图的代码如下:
if(msg == "Settings") { UIStoryboard storyBoard = UIStoryboard.FromName("MobileSettings", null); MobileSettingsViewController mobileView = storyBoard.InstantiateViewController("MobileSettingsViewController") as MobileSettingsViewController; PresentViewController(mobileView, false, null); }
在该视图的控制器中,通过以下代码关闭视图:
cancelButton.TouchUpInside += delegate (object sender, EventArgs e) { this.DismissViewController(false, null); };
现在遇到的问题是:关闭原生视图后,WebView内的弹窗仍然显示,不知道如何隐藏它。
解决方案
WebView内的弹窗属于网页层面的元素,原生代码无法直接操作,必须通过JS交互通知网页隐藏弹窗,具体实现如下:
修改关闭按钮事件,添加JS调用逻辑
更新关闭按钮的点击事件代码,在关闭原生视图后,让WebView执行对应的JS代码隐藏弹窗:cancelButton.TouchUpInside += async delegate (object sender, EventArgs e) { // 关闭原生视图 this.DismissViewController(false, null); // 假设你的WebView实例名为webView,需确保它能被当前控制器访问 if (webView != null) { // 方案1:通过CSS选择器直接隐藏弹窗,替换为你网页中弹窗的实际选择器 await webView.EvaluateJavaScriptAsync("document.querySelector('.modal-container').style.display = 'none';"); // 方案2:如果网页本身有弹窗关闭函数(比如网页里定义了closePopup()),优先用这个更可靠 // await webView.EvaluateJavaScriptAsync("closePopup();"); } };关键注意点
- 必须替换
.modal-container为网页中弹窗元素的真实CSS类名、ID或其他选择器,比如弹窗的ID是settings-modal,就改成#settings-modal - 如果网页开发时已经提供了关闭弹窗的JS方法,调用该方法比直接修改样式更稳妥,避免后续网页结构变更导致失效
- 确保WebView实例能被当前控制器访问,可以通过构造函数传递、委托回调或全局引用的方式实现
- 必须替换
内容的提问来源于stack exchange,提问作者Gith
相关产品推荐
相关产品推荐

