论坛首页 Web前端技术论坛

真正的用window.open()代替window.showModalDialog()

浏览 49971 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-09-15  

模式窗口太过于局限性,所以我研究了一个完全可以用window.open()代替window.showModalDialog()的方法,其资料贴在了下面:

 

有两个页面,一个是调用页面---main.html,一个是被调用页面---modalWindow.html

main.html

--------------------------------------------------------------------------------------------------------------------------------------------

click here


 <script>
  
 newWin=null;
  
function abc()
{
newWin =window.open('modalWindow.html','newWin','height=200,width=400,top=200,left=200,toolbar=no,menubar=no,scrollbars=no, resizable=no,location=no,status=no');
 
  
}

 

window.onfocus=function (){  

 if(newWin){
  if(!newWin.closed)
   newWin.focus();
  
 } 
 
};

window.document.onfocus=function (){  


 if(newWin){
  if(!newWin.closed)
 newWin.focus();
  
 } 
 
};

 

window.document.onclick=function (){  


 if(newWin){
  if(!newWin.closed)
 newWin.focus();
  
 } 
 
};

window.document.ondblclick=function (){  


 if(newWin){
  if(!newWin.closed)
 newWin.focus();
  
 } 
 
};

</script>

 

----------------------------------------------------------------------------------------------------------------------------------

modalWindow.html

------------------------------------------------------------------------------------------------------------------------------------

sub window!!!!



 

在这个页面modalWindow.html中的方法可以调用父窗口的方法

其用法是 opener.functionName(param);

 

 


   发表时间:2007-09-15  
我还没试过,但初步判断这样不够,因为window.onfocus=..等方式是bubble的,被点击的实际元素如果有onclick就先处理了,不能真正等同于modal
0 请登录后投票
   发表时间:2007-09-17  
哦,谢谢,请问楼上的朋友,这样的情况该怎么处理呢,请多指教.....
0 请登录后投票
   发表时间:2007-09-17  
一种思路吧:因为要阻止原窗口响应各种事件,可以把所有的事件回调都解除绑定,modal窗口关闭后再恢复;或者利用某些框架性代码,代理事件回调,代理时判断是否有modal窗口存在...
0 请登录后投票
   发表时间:2007-09-18  
而且还有一种情况是比较容易忽略的,不知道你考虑没有:
父窗口弹出模态窗口A,A再弹出模态窗口B,如此多级模态窗口,关闭窗口也只能反向一层层关闭。
0 请登录后投票
   发表时间:2007-09-20  
这种模拟是不会成功的。。。

你可以试试快速点击父窗口,JS响应速度没那么快,很容易就点出问题了。

真正能够解决Dialog问题的方案只有一个,那就是Float Iframe,用Iframe代替Window.open(),用DIV来做遮罩,控制模态。而且,这样做还有另外一个好处,那就是处理窗口间的关系变得异常容易。用户也不容易ganjue到自己被打扰了——因为你可以让Iframe加载完成时再显示出来,甚至可以加上一些特效,使得Iframe的浮出更加柔和自然。
1 请登录后投票
   发表时间:2007-09-20  
可以看一下,我以前写的一个使用html弄出来的modaldialog, http://hi.baidu.com/afcn007/blog/item/fe05e91bbfa774d7ad6e7515.html 有2个button,函数当中传入2个function当参数
0 请登录后投票
   发表时间:2007-09-22  
open() 不可能代替 showModalDialog()
这样做是钻死胡同牛角尖.
唯一方法:可以通过iframe或DIV在同一个Window实现


http://www.laputac.com/tech/
0 请登录后投票
   发表时间:2007-09-22  
open后再给原窗口加层遮罩
0 请登录后投票
   发表时间:2007-09-25  
不会吧,我见到更多的讨论是如何用showModalDialog() 代替open()...
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics