восстановление положения прокрутки на Flex Web Page - PullRequest
0 голосов
/ 20 декабря 2010

Это довольно важная, но упускаемая из виду функциональность, которую я предполагаю на веб-странице - на стандартной (негибкой) веб-странице отойдите от страницы и вернитесь к ней с помощью кнопки «назад» или «вперед», и она восстанавливает положение прокрутки,были на странице ранее.Это очень важная функция, и она бы очень раздражала, если бы ее там не было - страница автоматически возвращалась на самый верх каждый раз, когда вы ранее прокручивались вниз на длинном текстовом сайте.Я предполагаю, что сам браузер должен управлять этим, поскольку я был удивлен, обнаружив, что даже удаление файлов cookie, кэша и в основном всего не избавит от этой сохраненной позиции прокрутки.

Так что проблема заключается в том, чтогибкая веб-страница - как правильно это сделать.Я использовал SHaredObject.getLocal, но был ошеломлен, обнаружив, что после создания локального общего объекта он НИКОГДА не удаляется, и пользователь ничего не может сделать в браузере, чтобы удалить его (удаление файлов cookie и т. Д. Не оказывает никакого влияния.) Итак, у меня было около 100 различных общих объектов в подкаталоге Macromedia, в которых не хранилось ничего, кроме позиций прокрутки.Даже со стандартными веб-страницами вы можете удалить историю посещений, но с SharedObject они там навсегда, если вы просто не углубитесь в этот подкаталог файла и не удалите их вручную (что, конечно, пользователь никогда не сделает.)правда ли, что SharedObjects нельзя удалить из браузера?FLex даже называет SharedObjects «флеш-куки» в своих документах, но с реальными куки-файлами пользователь может их удалить.

1 Ответ

0 голосов
/ 21 декабря 2010

Мое решение состоит в том, чтобы иметь только один SharedObject для всех сгенерированных URL, и этот SHaredObject содержит объект, работающий как кольцевой буфер. Этот объект имеет свойства, проиндексированные по URL, причем каждое свойство указывает на информацию о сеансе для этого URL (например, положение прокрутки и т. Д.). Еще не проверял следующее, но вот что у меня есть. Если во Flex уже есть встроенный способ создания кольцевого буфера в локальном SharedObject, я его не нашел.

function createSessionInfo(url:String,info:Object):void {  

  var so_obj:SharedObject = null;
  try { 
    so_obj = SharedObject.getLocal("Session_Info","/");
  } catch (e:*) {}          
  if (!so_obj) return;

  if (so_obj.data.session == undefined)
    so_obj.data.session = new Object();

  var session:Object = so_obj.data.session;

  var date:Date = new Date();
  var max:int = 100;
  var first:String;
  var first_created:int=date.time;
  var cnt:int=0
  for (var p:String in session) {
    if (session[p].created < first_created) {
      first_created = session[p].created;  
      first = p;
    }
    if (++cnt == max) 
      delete session[first];
  }

  session[url] = new Object();
  session[url].created = date.time;
  session[url].info = info;

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