大多数的浏览器都内置了弹出窗口的屏蔽程序,即使没有内置此类屏蔽程序的浏览器,用户也可以安装Yahoo tool等带有内置屏蔽程序的应用工具。 结果就是用户可以将绝大多数弹出窗口屏蔽掉。 于是,再弹出窗口的时候,就应该考虑两种可能性。 如果是内置的屏蔽程序组织了弹出窗口,那么window.open()就可能会返回null 。此时,只要检测这个返回值就可以确定弹出窗口是否被屏蔽了。如下面的例子所示。

  var newOpenWin = window.open("http://www.baidu.com","_blank");

  if(newOpenWin == null)

  {

    alert("the  popup was blocked !");

  }

  但是如果是浏览器扩展或者其他的工具或者程序阻止了弹出窗口,那么window.open()就会抛出一个错误。 因此要想准确的检测弹出窗口是否被屏蔽,必须再检测返回值的同时,将会window.pen()的调用封装在一个try-catch 块中。 如下所示。

  var blocked = false;

  try

  {

    var m_win = window.open("http://www.baidu.com","_blank");

    if(m_win == null)

    {

      blocked = true;

    }

  }catch(ex)

  {

    blocked = true;

  }

  if(blocked)

  {

    alert("the popup was blocked ");

  }

  再任何的情况下,以上代码都会检测出调用window.open()打开的弹出窗口是否被屏蔽了。 但是这里有一点是需要注意的是,检测弹出窗口是否被当前的浏览器屏蔽掉了,但是它并不会组织浏览器显示与被屏蔽的弹出窗口有关的消息。

    

  

 

Jason

2014年02月18日

  

05-08 15:39