Изменение состояния родителя из iframe

Я делаю приложение, которое использует наборы фреймов. Проблема, с которой я столкнулся, заключалась в том, что каждый раз, когда я обновлял страницу, основной фрейм перенаправлялся на index.php с текущего URL-адреса во фрейме. Кадр перезагрузки помог бы, но это не очень удобное решение.

Чтобы обойти эту проблему, я подумал об использовании изменений состояния браузера html5. Изменение URL-адреса родительского фрейма не является проблемой, но это не меняет состояние. Простое обновление снова перенаправит все это на индексную страницу. Я попытался использовать history.js, чтобы передать текущий URL-адрес основного фрейма в историю, чтобы каждый раз, когда я обновлял или возвращался к чему-либо, он, по крайней мере, оставался на той же странице.

Проблема в том, что я не могу понять, как изменить состояние родителя из дочернего фрейма. И родительский, и дочерний URL-адреса находятся в одном домене. Можно ли это сделать с помощью history.js? Если да, то как?

Заранее спасибо.


person Enihr    schedule 29.05.2013    source источник
comment
frameset не поддерживаются HTML5, поэтому с ними нельзя использовать какие-либо функции HTML5. Пожалуйста, также уточните свой вопрос, теперь у вас есть framesets и iframes, это сбивает с толку...   -  person Teemu    schedule 29.05.2013
comment
содержимое фрейма находится в html5, и они отлично поддерживают состояния истории. Приложение, о котором я говорю, имеет два фрейма. Основная рама и опорная рама. Основной в том смысле, что это тот, где рендерятся страницы. Опорная рама имеет только несколько опорных функций. Я пытаюсь установить состояние родителя из дочернего фрейма   -  person Enihr    schedule 29.05.2013
comment
Устаревшие функции W3C   -  person Teemu    schedule 29.05.2013
comment
Ну, я знаю, что это не лучшая практика или что-то в этом роде, но в то же время я не могу позволить себе изменить настройку на данный момент из-за огромной базы кода, накопленной за год. Итак, исходя из существующего сценария, если вы можете предложить что-то, что поможет решить проблему, это будет очень полезно;   -  person Enihr    schedule 29.05.2013


Ответы (1)


Вы можете иметь ссылку на родительское окно в iFrame:

parentWindow = window.parent; 

Оттуда вы можете вызывать любые функции из вашего iFrame, которые имеют прямое влияние на вашего родителя, например:

parentWindow.location.reload();

ОБНОВЛЕНИЕ

В случае, если вы хотите сохранить состояние iFrame, это немного усложняет ситуацию. Вам нужно отправить его (состояние iFrame) родительскому элементу, а затем выполнить отправку формы, которая отправит состояние iframe на сервер. Затем ответ сервера должен загрузить iFrame в правильном состоянии.

person MaVRoSCy    schedule 29.05.2013
comment
Более конкретно, я пытаюсь обработать обновление и сохранить состояние фрейма, чтобы они не перенаправлялись на первый URL-адрес фрейма. - person Enihr; 29.05.2013