Как перезагрузить родительскую страницу при закрытии лайтбокса наложения (wordpress)?

#php #jquery #wordpress #lightbox #custom-wordpress-pages

Вопрос:

Мне нужно обновить родительскую страницу при закрытии лайтбокса наложения (не всплывающего окна).

В лайтбоксе нет кнопки «Закрыть», он закрывается нажатием в любом месте за пределами лайтбокса.

Я попробовал следующий код, но он не обновляет родительскую страницу.

Не могли бы вы сообщить мне, как обновить родительскую страницу?

HTML:

 <div class="dwqa-ask-question">
<a href="https://www.myweb.com/ask-questions/" rel="lightbox" data-lightbox-type="iframe">Ask Question
</a>
</div>
 

Лайтбокс:

 <div class="nivo-lightbox-overlay nivo-lightbox-theme-default nivo-lightbox-effect-fade nivo-lightbox-open">
    <div class="nivo-lightbox-wrap">
        <div class="nivo-lightbox-content">
        <iframe src="https://www.mycom.com/ask-questions/" class="nivo-lightbox-item" frameborder="0" vspace="0" hspace="0" scrolling="auto"></iframe>
        </div>
        <div class="nivo-lightbox-title-wrap"></div>
    </div>
    <a href="#" class="nivo-lightbox-nav nivo-lightbox-prev" style="display: none;">Previous</a>
    <a href="#" class="nivo-lightbox-nav nivo-lightbox-next" style="display: none;">Next</a>
    <a href="#" class="nivo-lightbox-close" title="Close">Close</a>
</div>
 

Добавлен следующий код на странице лайтбокса (=страница с вопросами):

 $(document).ready(function () {
    if (window.opener) { 
        window.close();
    }
    if (window != top) {
        top.location.replace(document.location);
    }
});
 
 jQuery(document).ready(function refreshParentWindow(){
           window.opener.location.href="/{!$CurrentPage.parameters.id}";
           window.top.close();
       });
 
 jQuery(document).ready(function (){
var rel = window.opener.location; 
window.close(); 
rel.reload(); 
});
 

Спасибо.


«Отзывчивый лайтбокс» — это плагин, который я использую для лайтбокса.

Комментарии:

1. Привет @isbe! Есть несколько способов, которыми вы могли бы написать это, все зависит от того, как вы хотите настроить свою страницу! Когда появляется ваш световой короб, есть ли у него определенное правило css? Когда ваш световой короб открывается, как вы можете его обнаружить? css/html мудрый. Имеет ли он определенный класс/идентификатор css/html?

2. Привет Руви: Я надеюсь, что вы в порядке и в безопасности, давно не виделись : ) Я использую плагин (Отзывчивый лайтбокс), чтобы открыть лайтбокс. Когда вы добавляете данные rel=»лайтбокс»-лайтбокс-тип=»iframe» к кнопке, она открывает лайтбокс. Если вам нужна какая-либо другая информация, пожалуйста, дайте мне знать. Спасибо тебе за твою постоянную помощь, Руви.

3. Спасибо! Нет проблем! Когда лайтбокс откроется, можете ли вы проверить его в своем браузере и посмотреть, имеет ли лайтбокс div тот же класс, который вы упомянули в своем вопросе? Или есть другие классы, в дополнение к dwqa-ask-question классу.

4. Привет, Руви: Я обновил HTML-код лайтбокса

Ответ №1:

Существует несколько способов настроить это. Лично я всегда использую дополнительные классы css для отображения и/или скрытия моих html-элементов на странице, но поскольку в настоящее время вы используете плагин, вы можете добавить прослушиватель событий на свою страницу.

Поэтому используйте этот javascript на своей странице:

 jQuery(document).ready($ => {

  console.log("You just loaded your js file onto the page"); // Testing whether you've loaded your js file correctly!

  $(document).on("click", e => {
    if (
      document.querySelector('.nivo-lightbox-overlay').contains(e.target)
      amp;amp;
      !document.querySelector(".nivo-lightbox-wrap").contains(e.target)
     ) {
      console.log("You just clicked outside of the lightbox wrap"); // Testing event listener

      location.reload(); // a simple refresh
      // OR 
      // location.reload(true); // a hard refresh
    };
  });
});
 

Вы видите orange область вокруг вашей обертки из лайтбокса с nivo-lightbox-overlay классом? Нажмите на него в любом месте, и он перезагрузит вашу страницу!

введите описание изображения здесь

Дайте мне знать, если вам удалось заставить его работать!


Другое решение

 jQuery(document).ready( $ => {
    $(document).on("click", "div.nivo-lightbox-overlay", () => {

        if ($("div.nivo-lightbox-overlay").length) {

          location.reload(); // a simple refresh
          // OR 
          // location.reload(true); // a hard refresh

        }

    })
});
 

Комментарии:

1. Спасибо, Руви. Я попробовал код, используя как .nivo-лайтбокс-наложение, так и .nivo-лайтбокс-обертывание. Но это не обновляет родительскую страницу. Не могли бы вы, пожалуйста, дать мне знать, что я могу попробовать?

2. Только что обновил свой ответ. Пожалуйста, попробуйте!

3. Привет, Руви: Еще раз спасибо за вашу помощь. Я вставил код на свою страницу лайтбокса, но он по-прежнему не обновляет страницу парджента. Консоль не показывает ошибок, поэтому я не уверен, как ее отредактировать.. Не могли бы вы помочь мне еще раз.. Извините…

4. Хммм, интересно! Ну, я установил Responsive Lightbox Lite плагин и создал точно такую же структуру html-ссылок, как и вы. Фрагмент javascript, который я вам предоставил, отлично работает с моей стороны. Вы уверены, что он не перезагрузит вашу страницу? Потому что он быстро перезагружается, вы можете даже не осознавать этого! Попробуйте поместить журнал консоли перед reload функцией, чтобы увидеть массаж консоли. console.log("You just clicked outside of the lightbox wrap");

5. Также убедитесь, что вы правильно загружаете свой файл javascript на страницу! С моей стороны это прекрасно работает. Я только что обновил свой ответ debugging строками. попробуйте это и следите за сообщениями на своей консоли. Вы должны быть в состоянии видеть оба сообщения.