对于ajax中弹出窗口,浏览器会默认拦截。
项目中对于一条记录,先用ajax到后台请求判断是否可以修改,前台页面根据返回值若可修改则新开一个模态对话框对已有数据进行修改。初期代码如下:
function onUpdate(xh){ check(); } function check(){ var jsonObj = {"domain.xh":xh}; var url = "/a/b!check"; ajaxCommon(url,jsonObj, "checkSuc"); } function checkSuc() { var retVal = data.domain.retVal; if (retVal/1 > 0) { alert("对不起,不能修改!"); }else { var url ="/a/b!initMx.action?domain.xh="+xh; window.showModalDialog(url,window,"dialogHeight:650px;dialogWidth:880px;center:yes;resizable:no;status:no;scroll:yes;help:no;minimize:yes;") } } function ajaxCommon(url,data,doSuccessFucName){ url = url + ".action"; $.ajax({ type: "POST", url: url, dataType:"json", data: data, contentType: "application/x-www-form-urlencoded; charset=GBK", beforeSend:function(){ }, complete:function(){ }, success: function(data){ try{ if(typeof(eval(doSuccessFucName)) =="function"){ eval(doSuccessFucName+"(data);"); } }catch(e){ } }, error:function(data){ } }); }
结果当可修改弹出窗口时被浏览器拦截。
最后想到个办法,将ajax设置为同步,在页面设置一个变量,ajax返回时更改这个变量值,当ajax执行完成后,再判断该值,若可修改,则弹出窗口。更改后代码如下:
function onUpdate(xh){ check(); } function check(){ var jsonObj = {"domain.xh":xh}; var url = "/a/b!check"; ajaxCommon(url,jsonObj, "checkSuc",false); afterCheck(); } function afterCheck() { var retVal = $("#retVal").val(); if (retVal/1 > 0) { alert("对不起,不能修改!"); }else { var url = "/a/b!initMx.action?domain.xh="+xh; window.showModalDialog(url,window,"dialogHeight:650px;dialogWidth:880px;center:yes;resizable:no;status:no;scroll:yes;help:no;minimize:yes;") } } function checkSuc() { $("#retVal").val(data.domain.retVal); } function ajaxCommon(url,data,doSuccessFucName,asyncFlag){ asyncFlag = asyncFlag == undefined ? true : asyncFlag; url = url + ".action"; $.ajax({ type: "POST", async:asyncFlag, url: url, dataType:"json", data: data, contentType: "application/x-www-form-urlencoded; charset=GBK", beforeSend:function(){ }, complete:function(){ }, success: function(data){ try{ if(typeof(eval(doSuccessFucName)) =="function"){ eval(doSuccessFucName+"(data);"); } }catch(e){ } }, error:function(data){ } }); }
结果,判断正常,弹出窗口正常。
相关推荐
常见的弹出窗口拦截情况包括使用`window.open()`函数和通过表单的`_blank`属性打开新窗口。 1. 使用`window.open()`函数:这种方法通常在需要新开窗口时使用,但当尝试通过POST方法传递数据或遇到跨域问题时,...
然而,在使用window.open()时,常常会遇到浏览器弹窗拦截的问题,这是由于现代浏览器对弹出窗口具有安全限制,特别是为了防止广告弹窗的干扰。当浏览器判断打开新窗口的行为属于未经用户同意的广告弹窗时,它会阻止...
在JavaWeb应用中实现广告弹出窗口主要涉及前端JavaScript技术和后端服务器的交互。JavaScript是一种广泛使用的客户端脚本语言,它允许我们动态地修改网页内容,包括创建和控制广告弹出窗口。在这个场景中,"javaweb...
然而,随着浏览器安全性的提升,许多现代浏览器默认阻止了某些类型的弹出窗口。特别是当窗口打开操作不是由用户直接行为触发时,例如在AJAX请求成功后尝试打开一个新窗口,浏览器会出于保护用户的考虑而拦截这一行为...
- 将弹出窗口的内容嵌入到当前页面中,利用AJAX更新内容,这样既可以避免弹出窗口被拦截,又能保持用户体验的一致性。 - 当必须使用弹出窗口时,可以检测浏览器是否启用了弹出窗口阻止功能,并提示用户暂时禁用或...
这种机制是为了防止恶意软件自动弹出窗口,干扰用户。 首先,问题的出现是因为浏览器将`window.open()`调用解释为非用户发起的事件,因此将其拦截。尽管在AJAX回调函数中模拟用户行为(如使用jQuery的`.trigger('...
在"ns-window--ajax页面动态加载弹出窗口"这个例子中,可能涉及的是通过Ajax技术实现弹窗内容的动态加载。这通常发生在用户点击某个按钮或链接时,触发Ajax请求,获取服务器上的数据,然后动态插入到弹出窗口的DOM...
在网页开发过程中,有时我们需要使用JavaScript的`window.open`函数来打开新的窗口或标签页,例如用于弹出新窗口展示详细信息或者进行页面跳转。然而,由于浏览器的安全策略和用户设置,`window.open`可能会被拦截,...
这种模式对话框能够避免传统弹出窗口带来的用户体验问题,如打断用户的浏览流程和可能被广告拦截器误判。 【Ajax 改造】系列文章的首篇展示了如何利用模式窗口消除网站中的“弹出窗口”和“导航死角”。弹出窗口...
为了在保持原有页面内容的同时弹出登录窗口,可以使用JavaScript的 `showModalDialog` 方法。此方法会弹出一个模态对话框,用户必须处理完对话框中的内容才能继续操作其他部分。 示例代码如下: ```javascript ...
- 注意浏览器的安全设置可能阻止弹出窗口,如浏览器的弹窗拦截功能。 9. **实践应用建议**: - 在实际应用中,根据具体需求调整弹出窗口的样式和特性,以符合用户界面的设计和用户体验。 - 对于弹出广告或不友好...
然而,由于现代浏览器的弹窗拦截功能,这种操作往往会被浏览器认定为弹出广告等不需要的窗口而被阻止。浏览器的这种功能设计是为了提升用户体验,避免恶意程序通过自动打开新窗体干扰用户的正常浏览行为。 为了解决...
弹出层,也称为模态对话框或浮层,是网页设计中的一种交互元素,它在用户当前操作页面之上显示一个半透明的窗口,要求用户进行特定操作或提供信息。这种设计可以保持用户对当前页面的上下文感知,同时聚焦于弹出层...
thickbox是由Trent Riley开发的一个轻量级的jQuery插件,它允许开发者创建全屏弹出窗口,用于展示图片、网页、Iframe和多媒体内容。thickbox以其简洁的API和良好的自适应性,深受开发者喜爱。其核心特性包括: 1. ...
4. 弹出窗口采用层技术:传统的弹出窗口容易被浏览器的弹窗拦截,影响用户体验。HHFeditor 3.0采用了层(Layer)技术来实现弹出窗口,这使得对话框能够更好地融入到当前页面中,避免了被拦截的问题,同时也提供了一...
浏览器为了防止恶意脚本无休止地弹出窗口,会对非用户交互触发的`window.open`调用进行拦截。本文将详细讲解这一现象,并提供相应的解决方案。 **现象分析** 在项目开发中,如果直接通过JavaScript代码调用`window....
- 需要注意浏览器对弹出窗口的拦截设置,某些情况下可能需要告知用户关闭拦截功能。 - 考虑用户体验,避免过多的弹窗干扰正常浏览流程。 综上所述,JavaScript弹出窗体的实现涉及到多个方面的知识和技术点,开发者...
这种做法可以防止弹出窗口被浏览器的弹窗拦截功能阻止,确保了功能的正常运行,同时也能提供更好的用户体验,因为层结构允许更灵活的窗口定位和样式控制。 5. **自定义工具栏**:hhfeditor 3.0允许用户自由编辑工具...
在示例中,当返回数据大于0时,会弹出一个提示框显示“修改成功!”,并且刷新父窗口以显示更新后的内容。这里使用了`ymPrompt.alert()`来显示提示框,这是一个自定义的弹窗函数,可能来源于某个JavaScript库,因此...