Постоянные данные с помощью Javascript - PullRequest
3 голосов
/ 13 февраля 2010

У меня есть приложение, у которого есть «родительское» окно. В родительском окне есть пункты меню, подобные следующим (здесь используется PHP):

// sample link
echo "<li><a href=\"#\" onclick=openurl('covershift.php');>Shift Coverage</a></\
li>";

// logout link
echo "<li><a href=\"#\" onclick=openurl('logout');>Logout</a></li>";

Каждая ссылка открывает соответствующую страницу в отдельном «дочернем» окне. Когда родитель закрывает все дочерние окна должны закрыться. Я реализовал эту функциональность с Javascript, вот функция:

var childWindow = new Array();
var windowCount = 0;
function openurl(url)
{
  if(url != 'logout') {
    childWindow[windowCount]=window.open(url,'_blank','height=600,width=800,scr\
ollbars=1');
    windowCount++;
    if (window.focus) {
      childWindow.focus();
    }
  } else {
    var iCount;
    for (iCount=0; iCount < windowCount; iCount++) {
      if ((childWindow[iCount] != null) && !(childWindow[iCount].closed)) {
        childWindow[iCount].close();
      }
    }
    window.location='logout.php';
  }
}

Вот моя проблема: когда пользователь перезагружает родительское окно и затем нажимает кнопку выхода, дочерние окна остаются открытыми. Это имеет смысл, поскольку массив childWindow теряется при перезагрузке родителя.

Как сделать массив childWindow постоянным после перезагрузки?

Спасибо!

Ответы [ 2 ]

1 голос
/ 13 февраля 2010

Я не думаю, что вы можете заставить объект JavaScript сохраняться при загрузке окна. Вместо этого, вы могли бы сделать обработчик события unload, который закрывает ваши страницы?

window.onunload = myCloseFunction;
function myCloseFunction()
{
    // Just copying your code...
    var iCount;
    for (iCount=0; iCount < windowCount; iCount++) {
      if ((childWindow[iCount] != null) && !(childWindow[iCount].closed)) {
        childWindow[iCount].close();
      }
    }
}

Другим вариантом может быть опрос дочерних окон на наличие родителя.

В дочернем окне:

// Checks every 1 second for valid window.opener
var parentChecker = setInterval(function(){
    if(!opener){
        // Is this good practice?  I don't know!
        clearInterval(parentChecker);
        window.close();
    }
}, 1000);
0 голосов
/ 02 октября 2014

Если все, что вы хотите сделать, это сохранить массив, используйте http://rhaboo.org:

var store = Rhaboo.persistent("My store");

window.onunload = function () {
  store.write('windows', [ ... your array ...]);
}

function onLogout() {
  for ( var i=0; i<store.windows.length; i++ )
    closeWindowYourWay( store.windows[i] );
}
...