Различия между Chrome и Firefox: перезагрузка страницы, на которой запущена игра Javascript - PullRequest
4 голосов
/ 25 августа 2011

Я новичок в Javascript и веб-программировании в целом, так что это может быть глупой ошибкой. Тем не менее, у меня были проблемы с поиском информации об этом.

Я разрабатываю игру на Javascript, в которой игрок может ходить и перемещаться между сценами, щелкая и заставляя своего аватара ходить по разным зданиям / объектам. На данный момент у меня просто есть место смены страницы, по телефону this.gotoTimer = setTimeout(self.location = this.targetURL, 1000);, если обнаружена коллизия.

Страница отлично работает в обоих браузерах. Проблема в том, что пользователь нажимает кнопку возврата ... В Chrome все сбрасывается; Плеер появляется в той же области, в которой я его установил в коде, и все «цели цели» все еще действительны. Это желаемое поведение.

В Firefox, когда нажата кнопка «Назад» и страница перезагружается, игрок находится на своей последней известной позиции, и цель ссылки, которую он посетил, больше не будет ссылаться ... Я могу в конечном итоге деактивировать их всех, посетив их и нажав кнопку назад.

Из того, что я смог исследовать, похоже, проблема в том, как Firefox обрабатывает кеш, и обходной путь, который я смог найти, включает добавление случайного числа или времени к файлам Javascript. Это кажется мне грубым. Я также могу быть далеко.

Так что мне интересно две вещи:

  1. Это точное предположение о проблеме или есть другая проблема?
  2. Если это так, как лучше добавить эти числа? Мне кажется, что вся эта концепция очень смешная ...

Ответы [ 2 ]

2 голосов
/ 10 сентября 2011

Извините, что так долго отказывался от вопроса, но я нашел решение, которое сработало!

я сейчас звоню window.location.reload (истина); прежде чем я позвоню window.location = whatUrl;

... Я не уверен, почему это работает так хорошо (я полагал, что window.location.reload перезагрузит текущую страницу перед переходом на новую [это, очевидно, не то, что я хотел бы]), но это кажется в порядке. Наверное, он делает что-то, чего я не знаю, за моей спиной, но функционально он делает то, что я хочу.

1 голос
/ 26 августа 2011

Я думаю, что https://developer.mozilla.org/En/Using_Firefox_1.5_caching ответит на все ваши вопросы. Firefox на самом деле не перезагружает страницу при возврате, а скорее восстанавливает ее вместе с состоянием JavaScript. Итак, у вас есть несколько вариантов:

  • Добавьте обработчик событий unload, чтобы отключить это поведение (неоптимальное, снижает производительность).
  • Используйте window.location.replace() вместо присвоения window.location, это предотвратит возвращение пользователя (я думаю, это нежелательно).
  • Добавление обработчика событий pageshow для сброса состояния JavaScript.
  • Измените логику, чтобы он больше не предполагал, что пользователь уйдет и никогда не вернется после нажатия на ссылку.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...