开发者

Introduce load time delay in chrome extension

开发者 https://www.devze.com 2023-02-28 18:06 出处:网络
For a research project, I am coding a chrome extension where when I go to a certain url, it should introduce a load delay of 2 seconds. So basically I\'d like the effect where the user types in \"exam

For a research project, I am coding a chrome extension where when I go to a certain url, it should introduce a load delay of 2 seconds. So basically I'd like the effect where the user types in "example.com", they have to wait 2 extra seconds before the page begins to load. Is there any way to do this with chrome 开发者_开发技巧extensions? I've scoured the documentation but can't seem to find anything like this.


Chris's solution would work but it locks up the UI. You might also try this simple content script:

content_script.js:

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

manifest.json:

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

I must say though that it's very annoying. Furthermore, an astute user will know that something's up because it will show a blank page even when there is no "Waiting for www.example.com..." status line.

If you want to perfectly mimic a slow network, I think the best way would be to create a HTTP/HTTPS (or maybe SOCKS5) proxy that introduces the delay. You can make the browser use the proxy only on certain URLs by creating a proxy.pac file or by using the Chrome experimental proxy API.

So what do you want to simulate? If you want to simulate high-CPU JS or rendering, then use Chris's solution. If you want to simulate slow network, use a proxy. My solution kind of simulates a slow network but it's not a perfect disguise.


In your manifest.json file, add in:

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

And create a sleep.js file containing:

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

(found from phpjs)

So if someone goes to www.example.com, the page will wait 2 seconds before loading. However, this won't work if the page redirects to another page (which example.com does, so a different site would be better to try on :))

Check the manifest docs for more info.


Both Chris's and Yonran's solution didn't work for me. What worked for me: What is the JavaScript version of sleep()?

0

精彩评论

暂无评论...
验证码 换一张
取 消