Jump to content
  • 0

Баг с кнопкой назад


Vlad
 Share

Question

Интересный баг нашли в скриптах. Если перейти на эту страницу и пощёлкать по вкладкам "Результат" и "HTML" несколько раз, то на кнопку назад надо столько же раз нажать.

http://webref.ru/html/a#field_html_example

 

Вкладка с результатом сделана в виде iframe, в него загружается PHP-скрипт. Сами вкладки и отправка формы на сервер сделаны на JS.

 

Как исправить можно JS, чтобы Назад работало только один раз?

Link to comment
Share on other sites

17 answers to this question

Recommended Posts

  • 0

1. Ссылка битая.

2. Мне кажется, не надо ничего писать в window.history и будет всё хорошо. Тем более в данном случае (на webref.ru) это не имеет никакого смысла, так как состояние не сохраняется всё равно.

Link to comment
Share on other sites

  • 0

Даже не знаю. Ну просто не писать и всё :) Мне кажется, что это какой-то из скриптов старается. Хотя это, конечно, предположение, но других у меня просто нет.

Link to comment
Share on other sites

  • 0

Скрипт сам писал и там точно никаких манипуляций с window.history не проделывал.

 

Помог перевод формы с post на get. Но не грозит ли это какими-либо проблемами в будущем?

Link to comment
Share on other sites

  • 0

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

Link to comment
Share on other sites

  • 0

Напрямую, скорее всего, не получится вставить. Потому что вместо <> стоят < > Плюс подсветка синтаксиса добавляет свои теги. Наверное надо в сторону ajax смотреть.

Link to comment
Share on other sites

  • 0

Напрямую, я имел в виду, что без использования формы и атрибута target.

Сделать post-запрос аяксом, а полученную разметку вставить в iframe.

Думаю, должна решиться проблема.

Link to comment
Share on other sites

  • 0

Возвращаюсь ещё раз к теме, после некоторых экспериментов.

  • Метод GET вместо POST в форме не подходит, потому что некоторые примеры достаточно длинные, соответственно, сервер не может их принять из-за ограничений на GET.
  • AJAX работает хорошо, но мне, к сожалению, не подходит по некоторым причинам. Во-первых, примеры у меня полные, со всеми <html>, <head> и др. и если их вставить на страницу в таком виде, начинается бардак. Во-вторых, пути к картинкам становятся неверными и демонстрация примеров перестаёт работать.
  • Программная замена .src у фрейма не помогает.

Есть пара идей:

  • Создавать новый <iframe> программно и показывать его, как предложил Игорь.
  • Создавать <iframe> программно, передавать его данные настоящему фрейму.

Какие есть предложения?

Link to comment
Share on other sites

  • 0

Помимо вышеперечисленного могу предложить:

1. попробовать поиграться с атрибутом sandbox у iframe

2. удалять ненужную запись из истории (примерно так)

let state = history.state; // save state
// sending form
history.replaceState(state);

https://habrahabr.ru/post/123106/

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy