Проверка iFrame - PullRequest
       4

Проверка iFrame

1 голос
/ 27 июня 2009

У меня в настоящее время есть iframe на моей главной странице, на котором есть несколько флажков, которые необходимо активировать перед выходом из iframe, т. Е. Если пользователь начинает проверять флажки и на полпути, они затем нажимают обратно на главную страницу т.е. оставляя iframe, я хотел бы иметь возможность отловить / проверить, что они покинули iframe, и запросить их с сообщением об этом, скажем, с «Примечание: вы потеряете все введенные здесь данные - Выйти: Да / Нет». ?» введите сообщение.

Любая помощь / веб-сайты будут оценены.

Спасибо. Тони.

1 Ответ

1 голос
/ 27 июня 2009

Приглашение пользователя сохранить при выходе со страницы . Эта статья 4guys звучит как то, что вам нужно. Это говорит о событии onbeforeunload. Здесь есть несколько потрясающих сообщений здесь, на stackoverflow, также касающихся onbeforeunload.


Похоже, что onbeforeunload действительно не срабатывает для iframe. Мудак!

Вот пример кода, который должен работать. Это будет работать только в том случае, если вы находитесь в том же домене, в противном случае та же политика происхождения предотвратит возврат iframe к родителю.

Я также не проверял их во многих браузерах, поэтому YMMV .

У вас есть два варианта здесь, в зависимости от того, куда вы хотите поместить подсказку для логики изменений.

Вариант один включает в себя iframe, сообщающий родительскому окну об изменениях.

JavaScript родительского окна:

    window.onbeforeunload=closeIt;
    var changes = false;
    function closeIt()
    {
      if (changes)
      {
          return "Yo, changes, save 'em?";
      }
    }
    function somethingChanged() {
        changes=true;
    };

JavaScript-код iframe:

    $(function() {
        $('input').change(parent.somethingChanged);
    });

Второй вариант включает в себя iframe, контролирующий onbeforeunload родительского окна

JavaScript родительского окна:

Нет ни одного: -)

JavaScript-код iframe:

    $(function() {
        parent.window.onbeforeunload = myCloseIt;
        $('input').change(somethingChanged);
    });
    var changes = false;
    function myCloseIt()
    {
      if (changes)
      {
          return "Yo, changes, save 'em?";
      }
    }
    function somethingChanged() {
        changes=true;
    };

В любом варианте наивную переменную changes можно немного увеличить, возможно, используя методы из статьи 4guys, чтобы узнать, действительно ли были действительно какие-либо изменения.


Если они находятся в разных доменах, но вы по-прежнему отвечаете за "обе стороны" HTML, есть еще варианты, они просто сложнее.

xssinterface - это библиотека, которая использует postMessage, хеши локаций и секретную черную магию вуду для связи между сайтами.

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