怎样防止IE工具对window.open的拦截?

作者:寒江   编辑: 中国网管之家   发布时间:2007-1-31 15:04:54  阅读次数:     发表评论

http://blog.joycode.com/lostinet/archive/2004/07/12/27195.aspx

http://www.cnblogs.com/huobazi/archive/2004/07/10/22926.aspx

showModalLessDialog
在win=showModalDialog( 'open.htm',[a,b,c],option );后,可以立刻设置 win.opener=window;

没有用
"xp sp2和maxthon的新版都拦截了这个窗口"

我的做法是判断,如果被拦截了就显示一个连接,告诉用户这个连接用来弹出窗口的,他自己点连接就进去了.
叫他允许,不然下次还会出现提示,这样就可以了.


DHTML 怎样防止IE工具对window.open的拦截
http://www.cnblogs.com/huobazi/archive/2004/07/10/22926.aspx

我这里也有一个类似的解决方案:

<script>
window._open=window.open;
window.open=window_new_open;
function window_new_open( a,b,c )
{
 var win;
 if( c )
  win=window._open( a,b,c );
 else if( b )
  win=window._open( a,b );
 else
  win=window._open( a );
 if( win!=null&&!win.closed )
  return win;

 var option='status:0;help:0;dialogleft:10000px;dialogtop:10000px;dialogheight:0px;

dialogwidth:0px';

 win=showModalDialog( 'open.htm',[a,b,c],option );

 return win;
}
</script>
<script>

var win=window.open( 'http://www.lostinet.com/' );

win.close(  );

</script>

其中 open.htm 为:
<title>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;</title>
<script>
function window.onload(  )
{
 var args=window.dialogArguments;
 var a=args[0];
 var b=args[1];
 var c=args[2]
 var win;
 if( c )
  win=window.open( a,b,c );
 else if( b )
  win=window.open( a,b );
 else
  win=window.open( a );
 window.returnValue=win;
 window.close(  );
}
</script>

这个的好处就是不用改变已有的代码。只要想办法把这个代码放进原来的网页的前面把window.open替换掉就可以了。

IE中,关闭窗口是 window.onunload 不执行的 bug
当使用

window.onunload=function(){...} 时,

如果窗口刷新或浏览其他页面,则该函数会被调用.

而如果窗口是被关闭时,则该函数不会被调用.

目前不清楚为什么会这样.

使用 window.attachEvent('onunload',function(){...});则可以解决问题.

我们习惯用onbeforeunload来代替

我也遇到过这样的事情,只好用onbeforeunload来代替的,不明白是怎么回事,现在看来只好认为是ie的bug了 : )
这样不错,解决了一个很不爽的问题

我原来解决的办法是在onunload函数最后加上alert('xxx'),就可以了

所以我想它不是不执行,它是执行了,但是关闭的速度比执行里面内容的速度还快,所以如果没有alert停住,有时候是成功的,有时候失败
用onbeforeunload来代替在打开本页面后就关闭是可以的,但此页面转到其它页面,又转后到本页面,然后关闭它又不起作用了,怎么办

建议多读读标准

ms做的一些扩展,拿到firefox,opera等等浏览器上,就惨不忍睹了,有很多ms的扩展,用标准的方法也能实现,而且就不依赖于浏览器了。

对那些不能实现的,只要放弃一些看似花哨,但是实际没有用的东西,你做的网页就可以做到对世界上每一个用户都是友好的。

gmail的用户界面不好么?但是人家高度兼容所有的浏览器,看着虽然不花哨,但是非常的方便快捷,那才是技术的体现。

 

=============================

在项目开发中,客户要求在某些页面中,把IE中把所有的工具栏(包括地址栏,菜单)都去掉。这时候,只能采用window.open来实现该效果。
如果客户的机器安装了上网助手之类的工具时,使用window.open就没有效果。
 
使用如下的脚本
<script>
window._open=window.open;
window.open=window_new_open;
function window_new_open( a,b,c )
{
 var win;
 if( c )
  win=window._open( a,b,c );
 else if( b )
  win=window._open( a,b );
 else
  win=window._open( a );
 if( win!=null&&!win.closed )
  return win;
 var option='status:0;help:0;dialogleft:10000px;dialogtop:10000px;dialogheight:0px;
dialogwidth:0px';
 win=showModalDialog('open.htm',[a,b,c],option);
 return win;
}
</script>
然后,创建一个open.htm,把下面的代码弄进去
<title>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</title>
<script>
function window.onload(  )
{
 var args=window.dialogArguments;
 var a=args[0];
 var b=args[1];
 var c=args[2]
 var win;
 if( c )
  win=window.open( a,b,c );
 else if( b )
  win=window.open( a,b );
 else
  win=window.open( a );
 window.returnValue=win;
 window.close(  );
}
</script>
最后,只需要在项目中用到window.open方法的页面前面,加入上面那段脚本,就可以了

怎样防止IE工具对window.open的拦截?
本文地址: http://www.net-web.cn/1012.htm
热门评论
网友评论仅供网友表达个人看法,并不表明网管之家同意其观点或证实其描述


[ Ctrl + Enter]