Изменение адреса страницы при нажатии кнопки "сохранить" в мобильной версии.

Windows Phone 8.1. При нажатии кнопки "сохранить" открывается список категорий сохранение и адрес в строке браузера магически меняется на http://pikabu.ru/story/ после выбора категории, адрес в строке браузера не восстанавливается. Думаю, не стоит объяснять, что если пропадёт интернет или что-то не загрузится, то попытка перезагрузить страницу приведёт к ошибке 404.


Пока писал, нашёл ещё один баг -- тег 404 нельзя добавить к посту в мобильной версии (он не выбирается из списка)

Багрепорты

7.2K поста1.1K подписчиков

Добавить пост

Правила сообщества

Опишите подробно:

- Возникшую проблему

- Порядок действий для повторения проблемы

- Версию Пикабу: ПК, мобильная браузерная, приложение Android, приложение iOS

- Ваше устройство, ОС, браузер


Приложите скриншоты или видео с проблемой

И мы постараемся помочь :)

Автор поста оценил этот комментарий

Добрый день, WP 8.1 к сожелению уже устаревшая платформа.

Насчёт бага с тегом спасибо за багрепорт, передам разработчикам.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
@supporttech а нельзя ли отключить изменение адреса в строке адреса в Javascript коде для этой платформы? Уверен, там один if добавить и всё. Вообще мне не понятно для чего менять адрес страницы в js? Пожалуйста, сделайте приятное тем людям, которые поверили Майкрософту, а он потом их кинул. Когда в дороге сидишь на пикабу, первый баг сильно раздражает.
показать ответы
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
Автор поста оценил этот комментарий

100% проблема в window.history.pushState или window.history.replaceState, а именно - 3 параметр этих методов. Жаль, я не знаю, как консоль разработчика для Internet Explorer'а на WP8.1 вызвать.


КСТАТИ, заметил, что иногда при закрытии списка категорий, состояние, записанное при помощи pushState, не выталкивается. Т. е. можно нажать назад, и вернуться на старый URL. Но не всегда.

Автор поста оценил этот комментарий

Добрый вечер) Только что попробовал на WP 8.1 повторить проблему и никак не удалось. Я пробую в стандартном браузере открыть список категорий и он без проблем открывается и редиректа не происходит.

Уточните, проблема всё ещё существует у вас?

раскрыть ветку (1)
Автор поста оценил этот комментарий

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


P. S. Сейчас понимаю, что сразу нужно было их прикладывать. Из-за этого недопонимание возникло. Телефон Lumia 525, Windows Phone 8.1, все возможные официальные обновления установлены. Модификаций прошивки не делал.

Иллюстрация к комментарию
Иллюстрация к комментарию
Иллюстрация к комментарию
Иллюстрация к комментарию
показать ответы
Автор поста оценил этот комментарий

Здравствуйте!

Возможно, это баг WP. Пробую нажимать на кнопку "Сохранить" и сохранять пост: как в мобильной, так и полной версии адресная строка не изменяется. Вы можете проверить это, открыв мобильную версию на ПК.

раскрыть ветку (1)
Автор поста оценил этот комментарий

@SupportTech, и всё-таки она меняется.


Посмотрите ваш http://cs.pikabu.ru/app-mobile/1.3.62/main/app.js на наличие изменений window.history (после обфускации мне лично не очень удобно разбирать код).


Первую проблему уже увидел в том, что https://connect.facebook.net/en_US/fbevents.js перехватывает вызов window.history.pushState


Если поставить breakpoint'ы на все обращения к window.history (pushState, replaceState) и переменной, куда вы копируете ссылку на неё, и кликнуть на иконку сохранения, то вы увидите, что какая-то из точек останова сработает.


Конкретно, выполнится код (см. скриншот).


Напомню, что проблема, озвученная в посте, заключается в том, что в качестве 3-го параметра (URL) в вызовах методов pushState или replaceState передаётся "http://pikabu.ru/story/" на платформе Windows Phone 8.1.


Сюда же относиться вопрос, почему в некоторых вызовах pushState в app.js вы передаёте 2 аргумента, а в некоторых - 3 (там 3 аргумент - это пустая строка).


В качестве костыля для WP8.0 и 8.1 можно бы было устанавливать _useHistoryState в false.


P. S.

также прошу обратить внимание на этого монстра

this.history[t.replace ? "replaceState" : "pushState"]({}, document.title, n);

ниже код копирования ссылки на window.history (из chrome dev tools):

var M = t.History = function() {
this.handlers = [],
n.bindAll(this, "checkUrl"),
typeof window != "undefined" && (this.location = window.location,
this.history = window.history)
}
Иллюстрация к комментарию
показать ответы