всплывающее окно только «всплывающее» один раз в сафари - PullRequest
0 голосов
/ 10 февраля 2012

У меня есть всплывающее окно с JavaScript, оно создается при нажатии на событие onclick тега:

top.popUp('/bus/popup.asp', '', 'height=457px,width=525px,status=no,scrollbars=no,resizable=yes,location=no,menubar=no,toolbar=no');return false;">

function popUp(url, winName, params, win)
{
    var winExists = false;

    if (win.handler)
    {
        if (!(win.handler == "" || win.handler.closed || win.handler.name == undefined))
        {
            winExists = true;
        }
    }   

    if (!winExists)
    {
        win.handler = window.open(url, winName, params)
    } 
    try
    {
        win.handler.focus();
    }
    catch (e)
    {
    }
    return false;
}

Я также обнаружил две эти забавные маленькие функции в основном файле, которые запускаются при выгрузке всплывающего окна:

// Hack for onUnload and onBeforeUnload
onBeforeUnloadHappened = false;
closeDirectly = false;

function onBeforeUnloadHandler()
{
if (!closeDirectly)
{
    openerUnhilightSaveLink();
    onBeforeUnloadHappened = true;
}
}
function onUnloadHandler()
    {
if (!closeDirectly)
{
    if (!onBeforeUnloadHappened)
    {
        openerUnhilightSaveLink();
    }   
    else
    {
        onBeforeUnloadHappened = false;
    }
}   
}

Проблема в том, что в Safari окно всплывает только один раз, каждый последующий щелчок по ссылке дает вам nada, zilch, ничего ... как мне это исправить?

Я нашел пару статей, Google - мой друг, он-лайн, и они предложили мне добавить this.close (), что я и сделал для события unload, но, похоже, это не решило проблему.

Другая вещь, которую я нахожу странной, заключается в том, что onUnloadHandler () фактически не происходит каждый раз, когда страница выгружается! Разве это не должно вызываться каждый раз самой страницей независимо от того, что еще произошло?!

Спасибо

1 Ответ

0 голосов
/ 10 февраля 2012

По моему мнению, ваш всплывающий код написан неправильно.Это работает в Safari, как я только что проверил.Это то, что я сделал.

// Create a global popup object as you should rarely ever
// have more than one popup open at a time.
window.popUpObj = null;

// The function to call the popup.
function popUp(url, winName, params)
{

  // If the window has not been defined or if it has been closes open it.
  // Since we defined window.popUpObj to be null we'll expect only 2 conditions.
  if(window.popUpObj == null || window.popUpObj.closed)
  {
    window.popUpObj = window.open(url, winName, params);
  }

  // Get window focus
  window.popUpObj.focus();

  // Return false.
  // we do this so that when we call it we don't need a ; to return false afterwards
  // we just add return before the function call.  It's a bit more elegant.
  return false;
}

Вы можете назвать это так.Кстати, вы всегда должны заполнять 2-й параметр чем-то.

<a href="#" onclick="return popUp('/bus/popup.asp', '_blank', 'height=457px,width=525px,status=no,scrollbars=no,resizable=yes,location=no,menubar=no,toolbar=no');">Link</a>

Вот рабочий документ HTML.

<html>
  <head>
    <script type="text/javascript">

   window.popUpObj = null;

    function popUp(url, winName, params)
    {
      // If the window has not been defined or if it has been closes open it.
      if(window.popUpObj == null || window.popUpObj.closed || window.popUpObj.name == undefined)
      {
        window.popUpObj = window.open(url, winName, params);
      }

      // Get window focus
      window.popUpObj.focus();

      // Return false.
      return false;
    }
    </script>
  </head>
  <body>


    <a href="#" onclick="return popUp('http://www.google.com/', '_blank', 'height=457px,width=525px,status=no,scrollbars=no,resizable=yes,location=no,menubar=no,toolbar=no');">Link</a>

    <a href="#" onclick="window.popUpObj.close(); return false;">close</a>

  </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...