Fancy Box - как обновить родительскую страницу при закрытии всплывающего окна iframe?

Я хочу, чтобы моя родительская страница обновилась, когда я закрыл всплывающий кадр Fancy Box. У меня есть страница входа во всплывающее окно, поэтому мне нужна родительская страница для обновления, чтобы показать новое состояние входа, когда Fancy Box закрывается.


Я могу заставить его работать без кода iFrame:

<script type="text/javascript">
 $(document).ready(function() {
  $("a.iframeFancybox1").fancybox({
   'width': 800,
   'height': 450,   
   'onClosed': function() {   
     parent.location.reload(true); 
    ;}
   });
 });
</script>

Но я не могу заставить его работать с кодом iFrame:

<script type="text/javascript">
 $(document).ready(function() {
  $('a.iframeFancybox1').fancybox({
   'width': 800,
   'height': 450,
   'type' : 'iframe'
   'onClosed': function() {
     parent.location.reload(true); 
    ;}
   });
 });
</script>

Проблема связана с этой строкой:

'type' : 'iframe'


Как только я добавляю эту строку, всплывающее окно перестает работать.

Может ли кто-нибудь предложить решение о том, как я могу получить всплывающее окно iframe в Fancy Box, и все-таки вернуть родительскую страницу, когда окно закрывается? Спасибо!

Ответы

Ответ 1

$(".fancybox").fancybox({
    type: 'iframe',
    afterClose: function () { // USE THIS IT IS YOUR ANSWER THE KEY WORD IS "afterClose"
        parent.location.reload(true);
    }
});

В качестве альтернативы:

Перейдите в файл jquery.fancybox.js и перейдите в строку 1380, это будет выглядеть так: parent.location.reload(true);

afterClose: function (opts) {
    if (this.overlay) {
        this.overlay.fadeOut(opts.speedOut || 0, function () {
            $(this).remove();
            parent.location.reload(true);
        });
    }
    this.overlay = null;
}

Ответ 2

$(".fancybox").fancybox({
            'width'             : '75%',
            'height'            : '65%',
            'autoScale'         : false,
            'transitionIn'      : 'none',
            'transitionOut'     : 'none',
            'type'              : 'iframe',
            'hideOnOverlayClick': false,
            'onClosed'          : function() {
                                  parent.location.reload(true);
                                  }
        });

Ответ 3

Для меня следующий код работает нормально:

$("a.ic-edit").fancybox({
            'width'     : '65%',
            'height'    : '85%',
            'autoScale'     : false,
            'titleShow' : false,
            'transitionIn'  : 'no',
            'transitionOut' : 'no',
            'scrolling'     : 'no',
            'type'          : 'iframe',
            onCleanup   : function() {
                return window.location.reload();
            }
       });

Я не могу сказать точно, но, возможно, причина в использовании "onCleanup" (на самом деле я не пытался использовать onClosed).

Ответ 4

'onClosed': function() {
 parent.location.reload(true); 
;} // <----is it ok if you have an extra ';' here?

Ответ 5

Работайте, чтобы избежать предупреждения POSTDATA при закрытии iFrame

1) Пожалуйста, заполните форму:

<form name="RefreshForm" method="post" action="" >
<input name="Name1" value="Value1" type="hidden" />
<input name="DatafromPost1" value="ValuefromPOST1" type="hidden" />
<input name="DatafromPost2" value="ValuefromPOST2" type="hidden" />
</form>

2) добавьте эти строки в конец вашего Fancy-Box:

Причудливый ver 2.x.x

afterClose : function() { 
setTimeout('document.RefreshForm.submit()',1000); }

Причудливая версия 1.3.x

     onClosed : function() { 
setTimeout('document.RefreshForm.submit()',1000); }

1000 = 1 секунда.

Ответ 6

ссылка refresh:

jQuery(function($){ 
    $('#refresh').click(function ()
        {      
            parent.location.reload();
    });
});

<a href="#" id="refresh">refresh</a>

вы можете дать:

setTimeout(function () {
            parent.location.reload(); 
        }, 1000);

или условие, например,

<script>
if(formSend == true){
setTimeout(function () {
                parent.location.reload(); 
            }, 1000);
}
</script>

Ответ 7

Помимо очевидного недостатка, который, как вы говорите, вы исправили IMO, это не проблема с fancybox, а проблема с родительским обновлением.

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

Вот код, который хорошо работает для меня в Chrome, FF, IE:

afterClose: function(){
    parent.location.href = parent.location.href;
},

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

Фактически строка:

parent.location.href = parent.location.href;

может использоваться с фреймами (от родителя, конечно) или без фреймов, чтобы просто обновить веб-страницу. НТН.

Ответ 8

При использовании примеров с 'location.reload' вы получаете всплывающее окно браузера, которое позволяет вам знать, что ему нужно перезагрузить страницу. Я нажал кнопку, чтобы обновить страницу и всплывающее окно с предупреждением.

$(".addDoc").colorbox({
    iframe: true, 
    width: "550px", 
    height: "230px",
    'onClosed': function() {
        $("#btnContSave").click();
    }
});

Ответ 9

Обновить или перезагрузить при закрытии формы с помощью fancybox в Shopify

Я использовал это в Shopify, но это будет работать и на других.

  jQuery(".add-device").fancybox({
    maxWidth  : 970,
    maxHeight : 700,
    fitToView : false,
    width     : '90%',
    height    : '90%',
    autoSize  : false,
    closeClick  : false,
    openEffect  : 'none',
    closeEffect : 'none',
    beforeClose: function() {
      device_has_subs = false;
      $("#mac_address").prop("readonly", false);
    },
    afterClose    : function() {
      window.location.reload(true);
        }
  });

здесь только после того, как Close выполняет задачу мы также можем записать родительский элемент вместо окна

afterClose    : function() {
  parent.location.reload(true);
    }

Если только reset форму в shopify, тогда, In shopify sometime $( "form" ) [0].reset() не работает, поэтому, используя итерацию, мы можем очистить значение формы

  jQuery(".add-device").fancybox({
    maxWidth  : 970,
    maxHeight : 700,
    fitToView : false,
    width     : '90%',
    height    : '90%',
    autoSize  : false,
    closeClick  : false,
    openEffect  : 'none',
    closeEffect : 'none',
    beforeClose: function() {
      device_has_subs = false;
      $("#mac_address").prop("readonly", false);

      var array_element = document.getElementById("form_id");
      if (array_element){

        for (i=0; i < array_element.length; i++){
            element = array_element[i].type.toLowerCase();
            switch(element){
              case "text":
                  array_element[i].value = "";
                  break;
              case "hidden":
                  array_element[i].value = "";
                  break;
              case "email":
                  array_element[i].value = "";
                  break;
              case "checkbox":
                  if(array_element[i].checked){
                    array_element[i].checked = false;
                  }
                  break;
              case "select-one":
                  array_element[i].selectedIndex = -1;
                  break;
              case "select-multi":
                  array_element[i].selectedIndex = -1;
                  break;
              default:
                  break;
          }

        }

      }

    },
  });

form_id - это форма id

Ответ 10

'onClosed': function() {parent.location.reload(true); }

Ответ 11

Вам просто нужно написать две строки, чтобы закрыть fancybox и после перезагрузки родительской страницы, на которой вы открыли свой fancybox.

Одно замечание: если вы попробуете его с помощью window.opener, он не будет работать, поскольку fancybox не рассматривается как дочернее окно родителя, когда дело доходит до window.opener

Еще одна вещь заключается в том, что window.opener не будет работать для Windows-телефона, а также с IE, поскольку IE уже глуп.

<script type="text/javascript">
parent.$.fancybox.close();
         parent.location.reload(true); 
</script>