Чтобы обнаружить, если пользователь закрывает браузер IE кроме onunload события, поскольку это инициировано, когда пользователь действительно обновляется и т.д. [копируют]

@related уже включает все сообщения, вам нужно удалить текущий пост из списка или пропустить его в итерации:

Исключить текущий пост перед итерацией

<% @related[@post.blog_category_id].reject { |post| post == @post }&.each do |rel| %>

[ 113] или просто пропустите итерацию, если текущая является рассматриваемой статьей:

<% @related[@post.blog_category_id]&.each do |rel| %>
  <% next if rel == @post %>
10
задан Cheran Shunmugavel 24 November 2011 в 22:57
поделиться

6 ответов

Вопросом не является необычный. Все же после 5 дней, ища Интернет Вы все еще не нашли удовлетворительный ответ. Это сам по себе должно быть довольно простым индикатором.

То, что я нашел в сети, существует серьезное отвращение к, 'нет может сделать' ответ. Когда что-то не может быть сделано, нормальный ответ не должен делать ответ.

Нижняя строка не, только может, что Вы пробуете, не сделаны, она не должна быть сделана.

Я думаю, что необходимо вернуться к старшим и объяснить им, что сеть UI является гостем, размещенным браузером на клиентской машине. Это гостевое состояние является важным.

Вы хотели бы, чтобы гость в Вашем доме имел право осуществлять Вас для предупреждения их, когда Вы хотите перейти к туалету? Нет?

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

Так как его вероятное, которое приложение было первоначально предназначено, чтобы быть поставленным через браузер перед любым кодом, было сокращено, вина лежит на включении требования во-первых.

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

19
ответ дан 3 December 2019 в 16:11
поделиться

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

Создайте всплывающую страницу "Содержания", содержащую FRAMESET с одним, 100%-й единственный КАДР, и поместите нормальный onUnload и onbeforeUnload обработчики событий в ГОЛОВЕ.

<html>
<head>
<script language="Javascript" type="text/javascript">
  window.onbeforeunload = exitCheck;
  window.onunload = onCloseDoSomething;

  function onCloseDoSomething()
  {
  alert("This is executed at unload");
  }

  function exitCheck(evt)
  {
  return "Any string here."}
  </script>
  </head>

    <frameset rows="100%">
    <FRAME name="main" src="http://www.yourDomain.com/yourActualPage.aspx">
    </frameset>
<body>
</body>
</html>

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

Если внешний кадр будет обновлен или на самом деле закроется, то события будут стрелять.

Как я сказал, не полно-защищенный, но обойду увольнение события на каждой обратной передаче.

1
ответ дан 3 December 2019 в 16:11
поделиться

В Вашей функции:

document.onclick = function()
    {
        //To check if user is navigating from the page by clicking on a hyperlink.
        if (event.srcElement.tagName == 'A')
            blnShowMsg = false; //To not popup the warning message
        else
            blnShowMsg = true;    //To popup the warning message
    }

blnShowMsg будет верен для любого, нажимают на Вашу страницу кроме иногда, когда пользователь нажимает на ссылку. Я иногда говорю, потому что, если event.srcElement.tagName не работает в некотором браузере, это всегда будет верно. И необходимо добавить много случаев к позволить использовать средства управления формой и т.д... Некоторые браузеры могут даже автоматически перезагрузить страницу, и я не уверен, будут ли onload события работать затем или нет.

Но сование предупреждения об отъезде страницы (или подобный) все время, несомненно, будет раздражать много людей, и они, вероятно, уедут постоянно...

Если Вы сделаете, например, программу онлайн, где очень важно, что что-то сохраняется перед отъездом я скажу, что ловля прежде разгружается, событие является немного слишком поздним, лучше для создания некоторого автосохранения (см. Gmail), и/или некоторое ненавязчивое предупреждение, когда пользовательское наведение мыши навигация menues без сохранения.

Но Вы не можете вынудить глупых пользователей не сделать что-либо глупое, на веб-интерфейсе это еще более верно, потому что Вы имеете меньше контроля: если пользователь захочет завершить программу прежде, чем сохранить, то они найдут способ сделать так, и они будут звонить Вам и жаловаться когда несохраненные данные dissapears; P

1
ответ дан 3 December 2019 в 16:11
поделиться

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

Меня попросили сделать что-то подобное для сценария приглашения для участия в опросе; они хотели спросить посетителя, если они хотели бы ответить на обзор о своем веб-сайте, и затем обзор должен открыться, когда они покидают сайт. Решение, которое я нашел, состояло в том, чтобы (неоднократно) объяснять управление, что это было, вероятно, невозможно, или в лучшем случае очень ненадежно; и вместо этого обзор должен сразу раскрыться (если бы посетитель согласился провести исследование), и вводная страница должна сказать, что посетитель для отъезда этого окна открывается и возвращается к нему после рассмотрения страницы.

1
ответ дан 3 December 2019 в 16:11
поделиться

"Спасибо приятель, но я уже прошел это и не нашел много справки там также. Мои старшие не довольны тем решением, поскольку помещение флага на ссылке Эври моего приложения является сложным заданием, и они боятся повреждения приложения. Любые другие предложения ценились бы. Спасибо еще раз".

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

$("#dangerbutton").click(function(){ 
  $("a").not( safeList ).click(function()
  {
     var dest = $(this).attr('href');
     someWarningFunction(function(){ 
         /* Stay where we are because user opted to stay */
     },function(){ 
         /* Continue Following Link because user didn't mind */
         window.location= dest; 
     });
     return false;
  });
});

Этот путь будет только стрелять в ссылку, нажимает на Вашу страницу. Пользователи должны привыкнуть к тому, которые "закрывают окно ==, отменяют все" логика, потому что многие используют и доверяют тому средству.

0
ответ дан 3 December 2019 в 16:11
поделиться

Вы могли видеть на многих страницах веб-форм предупреждение пользователя перед закрытием страницы. Когда кто-то обновляет страницу, есть вероятность потери всех заполненных данных. В таком случае это очень полезно.

Жизненный цикл страницы включает два события, например onunload и onbeforeunload. В этом случае вам нужно привязать функцию скрипта в window. Onbeforeunload, чтобы он вызывал при выгрузке страницы.

Опять же, это предупреждение не должно появляться, когда вы фактически отправляете страницу. Для этого установите логическое значение (например, shouldsubmit) для отправки страницы.

0
ответ дан 3 December 2019 в 16:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: