2013-04-03 6 views
3

Кто-нибудь знает способ обнаружения только одного экземпляра веб-приложения в Chrome? В настоящее время я использую флаг, использующий localStorage, но когда такие вещи, как сбой браузера, этот флаг все еще существует, поэтому в следующий раз, когда я попытаюсь получить доступ к приложению, он даст мне ошибку, потому что он думает, что другой экземпляр уже запущен.Отдельное приложение в Chrome

+0

Если вы не возражаете «перезаписать» старый экземпляр новым экземпляром, вы можете создать новый «идентификатор приложения» в первоначальном приложении, перезаписать его в localStorage и время от времени проверять этот флаг. Если он не соответствует текущему идентификатору приложения, закройте. – Passerby

+0

Вы пробовали сессионные куки? – sagibb

ответ

0

В соответствии мой комментарий о сессии Куки, насколько я знаю, Chrome поддерживает ту же сессию для всех вкладок (в процессе), так что это может быть идеальным решением для вас, тем более, что вы хотите/необходимо очистить сеанс после закрытия Chrome.

Вот некоторые другие родственные нити Stack Overflow, которые имеют противоположный вопрос:

How Come Closing A Tab Doesn't Close A Session Cookie?

How to differ sessions in browser-tabs?

Вы все еще можете сохранить постоянные значения (поперечные значения сеанса) в регулярном печенье/локальное хранение ,

+0

tutipute. Это именно то, чем я закончил. Был над инженерным материалом, пытающимся использовать localStorage, но настройка cookie cookie - это все, что было необходимо. – user322731

+0

Не одевайся фантазией на пикник ... :) Рад, что я мог бы помочь. – sagibb

0

Несколько мыслей:

  1. Переписать старый экземпляр с новым экземпляром.

    После первоначального прихода создайте новый «идентификатор приложения», перепишите его в localStorage (независимо от того, существует он или нет);

    Во время работы приложения время и время проверяйте этот флаг. Если он изменен на другое значение, это означает, что этот экземпляр должен быть «перезаписан», поэтому закройте.

  2. Используйте метку времени как флаг.

    Во время жизни приложения обновите текущую временную метку во флага за определенный интервал (например, 1 с, 10 с и т. Д.);

    После приложения начального, сравнить текущую метку времени с этим флагом:

    • Если это «достаточно коротким», можно предположить, что приложение в настоящее время работает, и отказываются продолжать;

    • Если это «достаточно долго», это означает, что последний экземпляр неожиданно вышел из него, и вы можете «безопасно» запустить этот новый экземпляр и, возможно, предоставить некоторую полезную информацию.

+0

Оба - отличное предложение. Я предполагаю, что я действительно хотел, чтобы предотвратить одновременное вхождение пользователя в приложение дважды. Это должно произойти при входе в систему, поэтому он должен блокироваться от входа в систему. – user322731

+0

@ user322731 Я добавил небольшое объяснение по второму пути. Если ваше приложение использует облако, возможно, вы также можете обработать его на стороне сервера. – Passerby

Смежные вопросы