Ввести задержку загрузки в расширении Chrome

Для исследовательского проекта я кодирую расширение Chrome, где, когда я перехожу к определенному URL-адресу, задержка загрузки должна составлять 2 секунды. Так что в основном мне бы хотелось, чтобы пользователь ввел «example.com», ему пришлось бы ждать 2 дополнительные секунды, прежде чем страница начнет загружаться. Есть ли способ сделать это с помощью расширений Chrome? Я просмотрел документацию, но не могу найти ничего подобного.


person raviparikh    schedule 26.04.2011    source источник


Ответы (2)


Решение Криса будет работать, но оно блокирует пользовательский интерфейс. Вы также можете попробовать этот простой сценарий контента:

content_script.js:

document.documentElement.style.display = 'none';
setTimeout(function() {document.documentElement.style.display = '';}, 1000);

манифест.json:

{
  "name": "Delay webpage displays",
  "version": "1.0",
  "content_scripts": [
    {
      "matches": ["http://*/*"],
      "js": ["content_script.js"],
      "run_at": "document_start"
    }
  ]  
}

Хотя должен сказать, что это очень раздражает. Кроме того, проницательный пользователь поймет, что что-то не так, потому что он покажет пустую страницу, даже если нет строки состояния «Ожидание www.example.com...».

Если вы хотите идеально имитировать медленную сеть, я думаю, что лучшим способом было бы создать прокси-сервер HTTP/HTTPS (или, возможно, SOCKS5), который вводит задержку. Вы можете заставить браузер использовать прокси только для определенных URL-адресов, создав файл proxy.pac. или с помощью API экспериментального прокси-сервера Chrome.

Итак, что вы хотите смоделировать? Если вы хотите имитировать высокопроизводительный JS или рендеринг, используйте решение Криса. Если вы хотите имитировать медленную сеть, используйте прокси. Мое решение имитирует медленную сеть, но это не идеальная маскировка.

person yonran    schedule 28.04.2011
comment
Вот как я это делаю в настоящее время. То, что я хочу смоделировать, — это медленная сеть, как вы упомянули, и я рассматривал возможность использования прокси, но это не идеально для моих целей, поскольку пользователь сможет заметить разницу, и это эксперимент HCI, где это будет иметь значение. - person raviparikh; 30.04.2011

В файле manifest.json добавьте:

"content_scripts": [{
    "matches": ["http://*.example.com/*"], // add in different URLs here
    "js": ["sleep.js"],
    "run_at": "document_start"
}]

И создайте файл sleep.js, содержащий:

function sleep (seconds) {
    var start = new Date().getTime();
    while (new Date() < start + seconds*1000) {}
    return 0;
}
sleep(2);

(получено из phpjs)

Поэтому, если кто-то перейдет на www.example.com, страница будет ждать 2 секунды перед загрузкой. Однако это не сработает, если страница перенаправляет на другую страницу (что делает example.com, поэтому лучше попробовать другой сайт :))

Дополнительные сведения см. в документах манифеста.

person Chris McFarland    schedule 27.04.2011
comment
run_at больше не работает :( (Если это когда-либо работало... только что нашел этот ответ) - person John Zabroski; 25.08.2015