Задержка загрузки страниц Javascript для определенного набора страниц - PullRequest
1 голос
/ 18 февраля 2011

Я хочу отложить определенный набор веб-страниц, используя небольшой скрипт greasemonkey.По сути, если загружаемый веб-сайт является частью набора страниц, я хочу отложить время загрузки страницы.например, если загружаемая страница имеет значение "http://www.a.com/","http://www.a.com/b", и т. д., то я хочу отложить загрузку на 30 секунд.

Ответы [ 4 ]

2 голосов
/ 21 февраля 2011

Предполагая, что комментарий Душары правильный:

"См. xkcd.com / 862 о том, что хочет плакат. (Наведите курсор на изображение, чтобы увидеть причину). На самом деле, я нашел этот вопрос, пока гуглял точно так же. «

Тогда это невозможно в Greasemonkey. Причина в том, что GM запускается после загрузки страницы (за исключением медленных картинок или вызовов AJAX). Таким образом, пользователь будет видеть страницу, и затем она будет, скажем, мигать пустым в течение 30 секунд ... Но только после того, как быстрые глазные яблоки увидят слишком много. ;)

Обновление: Теперь это возможно в Greasemonkey (с директивой @run-at document-start - Добавлено в августе 2011 г.). См. этот ответ для примера .


Обратите внимание, что создатель XKCD использует хорошую старомодную силу воли для реализации своей "простой 30-секундной задержки". С его запись в блоге :

"Многие люди спрашивали меня о системе, которую я использовал для реализации ограничения в альтернативном тексте сегодняшнего комикса.
...
Я установил правило, что, как только я выполнил любое задание или ему стало скучно, мне пришлось выключить компьютер ».

См. Также: «Расширение браузера (или другого программного обеспечения) для задержки загрузки страницы» - в котором теперь есть ссылки на надлежащие расширения, созданные людьми для этого.

1 голос
/ 11 сентября 2011

Существуют сценарии Greasemonkey, которые используют наложения для этого: Скрипт № 1 (работает на одном сайте)

Я пытался изменить это и придумал что-то очень грубое , которое работает со списком нескольких веб-сайтов: Script # 2 . Я больше не использую надстройку, потому что скрипт имеет странные побочные эффекты на некоторых сайтах и ​​может повлиять на производительность. Я уверен, что кто-то другой мог бы сделать намного лучше, но он есть, если вы хотите попробовать это сами или попытаться изменить его.

Для тех, кто не знаком с Greasemonkey, это дополнение к Firefox, которое позволяет вам модифицировать веб-сайты с небольшими фрагментами JavaScript, которые вы можете написать самостоятельно или установить из библиотеки. Чтобы использовать любой из этих сценариев, вам, конечно, необходимо установить дополнение Greasemonkey (https://addons.mozilla.org/en-US/firefox/addon/greasemonkey/) (не связано с отсутствием повторений - любой, у кого есть права на редактирование, может свободно ссылаться).

1 голос
/ 19 апреля 2011

Если вы считаете, что вам нужно некоторое время для загрузки некоторых элементов, прежде чем greasemonkey увидит, что он загружен, вы всегда можете настроить обработчик событий, который запускает вашу функцию, когда вы нажимаете вместо загрузки, а затем, когда вы готовы иметьфункция запускается, вам просто нужно где-то нажать на страницу.addEventListener ("click", function, false)

Если вы просто ищете способ сделать так, чтобы страницы загружались автоматически по истечении заданного промежутка времени, вам повезло бы с помощью imacros.

0 голосов
/ 14 сентября 2011

Как уже упоминалось, сценарии GreaseMonkey выполняются в DOMContentLoaded, поэтому после загрузки страницы.

Но на самом деле вы можете создать оверлей <div> на определенное количество секунд, и он будет иметь тот же эффект.

Вот немного улучшенная версия пользовательских скриптов, связанных @Jonathan (на самом деле, я написал ее самостоятельно;)

(function()
{
   var timeout = 30;
   var timeElapsed = timeout;

   function hide()
   {
      document.documentElement.style.overflow = "hidden";
      var newdiv = document.createElement('div');
      newdiv.id = "leechblocker";
      newdiv.style.width = "100%";
      newdiv.style.minHeight = "100%";
      newdiv.style.position = "fixed";
      newdiv.style.top = "0px";
      newdiv.style.left = "0px";
      newdiv.style.zIndex = 10000;
      newdiv.style.backgroundColor = "white";
      newdiv.style.display = "block";
      newdiv.style.overflow = "hidden";
      newdiv.style.textAlign = "center";
      newdiv.style.paddingTop = (window.innerHeight/2-10)+"px";
      newdiv.innerHTML = "Wait <span id='counter'>"+timeElapsed+"</span> seconds...";
      document.body.appendChild(newdiv);
   }

   function updateCounter()
   {
      var counter = document.getElementById("counter");
      timeElapsed--;
      counter.innerHTML = timeElapsed;
   }

   function unhide()
   {
      document.documentElement.style.overflow = "auto";
      var leechDiv = document.getElementById("leechblocker");
      leechDiv.parentNode.removeChild(leechDiv);
   }

   hide();
   window.setInterval(updateCounter,1000);
   window.setTimeout(unhide,timeout*1000);
}());
...