Как Facebook сохраняет заголовок и нижний колонтитул исправленными при загрузке другой страницы?

Нет одной роли, связанной с экземпляром; скорее, роль связана с методом , называемым экземпляром. Попробуйте это.

PATH = 'home_drive_'
PLATFORM = 'Linux_'
ITEM = '_PC'

class Credential:
    def __init__(self, *, path, platform, **kwargs):
        super().__init__(**kwargs)
        self.username_file = path + platform


class AXL(Credential):
    def __init__(self, *, item, **kwargs):
        super().__init__(**kwargs)
        self.item = item

    # "Private" method used to implement the other phone methods
    # You could inline this if you want.
    def _phone(self, role):
        return self.username_file + role + self.item

    def getphone(self):
        return self._phone('r')

    def writephone(self):
        return self._phone('rw')

    def statusphone(self):
        return self._phone('rwx')

reg1 = AXL(path=PATH, platform=PLATFORM, item=ITEM)

print(reg1.getphone())
print(reg1.writephone())
print(reg1.statusphone())
15
задан Sinan Ünür 13 July 2009 в 22:48
поделиться

5 ответов

Обратитесь к ответу Mark Brittingham для того, как разработать его, хотя я не думаю, именно это Вы спрашиваете здесь. Я предоставлю Вам техническую подробную информацию о том, как это работает (и почему это является довольно блестящим).

Смотрите на строку состояния, когда Вы нависнете над Ссылкой на профайл в заголовке...

http://www.facebook.com/profile.php?id=514287820&ref=profile

Это - то, где на это <a> тег указывают. Теперь посмотрите на строку поиска при нажатии на нее...

http://www.facebook.com/home.php#/profile.php?id=514287820&ref=profile

Заметить "#" идентификатор/хеш фрагмента? Это в основном доказывает, что Вы не оставили страницу, и предыдущий запрос был выполнен с Ajax. Они прерывают события щелчка на этих ссылках и переопределяют функциональность по умолчанию с чем-то собственным.

Чтобы заставить это произойти с JavaScript, все, что необходимо сделать, присваивают обработчика события Click тем ссылкам как так...

var header = document.getElementById('header');
var headerLinks = header.getElementsByTagName('a');

for(var i = 0, l = headerLinks.length; i < l; i++) {
  headerLinks[i].onclick = function() {
    var href = this.href;

    //Load the AJAX page (this is a whole other topic)
    loadPage(href);  

    //Update the address bar to make it look like you were redirected
    location.hash = '#' + href;

    //Unfocus the link to make it look like you were redirected
    this.blur();

    //Prevent the natural HTTP redirect
    return false;
  }
}

Одно невероятное преимущество для этого подхода - то, что он позволяет кнопке "Назад" быть функциональной (с небольшим добавленным обманом), который традиционно был болезненным побочным эффектом хронического использования Ajax. Я не на 100% уверен в том, каков этот обман, но я держал пари, что он так или иначе может обнаружить, когда браузер изменяет идентификатор фрагмента (возможно путем проверки его каждые ~500 миллисекунд).

Как примечание стороны, изменяя хеш на значение, которое не может быть найдено в DOM (с помощью идентификатора элемента) прокрутит страницу полностью к вершине. Для наблюдения то, о чем я говорю: Вы прокручиваете приблизительно 10 пикселей вниз от верхней части Facebook, выставляя половину главного меню. Нажмите на один из объектов, он перейдет он назад до верхней части страницы, как только идентификатор фрагмента обновляется (без любого окна задержка repaint/redraw).

39
ответ дан 1 December 2019 в 00:50
поделиться

Один способ предоставить заголовки и нижние колонтитулы, которые кажутся инвариантными, с помощью CSS - вот пример фиксированного нижнего колонтитула (заметьте "положение: зафиксированный";):

#Footer  { 
  font-size:xx-small; 
  text-align:left; 
  width:100%; 
  bottom:0px; 
  position:fixed; 
  left:0px; 
  background-color: #CCCCCC; 
  border-top: 1px solid #999999; 
  padding:4px; 
  padding-right:20px; 
  color:#666666; 
}

Вы захотите удостовериться, что Вы добавляете некоторую Граничную Нижнюю часть к своим отделениям страницы (те, которые заполняют основную часть страницы) оставлять комнату для фиксированного нижнего колонтитула (то же с заголовком с помощью Граничной Вершины).

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

3
ответ дан 1 December 2019 в 00:50
поделиться

С CSS абсолютное/фиксированное расположение, теги Div, содержащие заголовки и нижние колонтитулы, может быть где угодно в HTML. Как наверху!

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

Таким образом, то, что может произойти, - то, что новая страница быстро возвращает HTML, содержащий стили и заголовок и нижний колонтитул. Это содержание может быть представлено сразу браузером, поэтому когда это отображает следующую страницу, появляется, как будто они не изменились.

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

0
ответ дан 1 December 2019 в 00:50
поделиться

Увеличивать ответ Josh Stodola: В моем понимании менеджера закладок YUI делает точно это задание.

0
ответ дан 1 December 2019 в 00:50
поделиться

Ну, способ выполнить такую вещь был бы через Ajax, но насколько я вижу, Facebook на самом деле не делает этого... Я просто проверил, и это обновляет заголовок как большинство сайтов...

Править: Когда я сначала ответил на это, я смотрел на Facebook с Google Chrome (2.0), который по любой причине, на самом деле не делает этого этот путь->, когда я нажимаю на My Profile от домашней страницы, это дает мне это в строке поиска: http://www.facebook.com/profile.php?id=1304250071&ref=profile

и поэтому обновляет целую страницу... Странно

0
ответ дан 1 December 2019 в 00:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: