簡體   English   中英

即使瀏覽器在后台運行,如何使 Javascript Timeout function 運行?

[英]How to make Javascript Timeout function run even when browser is running in background?

我嘗試在 vanilla JavaScript 的幫助下制作一個計時器,並使用 Timeout Function 每毫秒更新計時器毫秒,但在啟動它之后,如果我切換到當前瀏覽器以外的另一個應用程序,超時 ZC1C425Z074C17A 執行它如果我離開 window 焦點 8 秒,然后幾秒鍾后我回到瀏覽器,計時器從 8 秒開始。 我希望它甚至在后台連續運行。

我也認為這可能會有所幫助,但我不知道如何實現這一點 - https://www.w3schools.com/js/js_api_web_workers.asp

是的,如果選項卡沒有聚焦,所有現代瀏覽器的設計都不允許 JS 執行,這是出於優化目的而設計的。

即使選項卡失去焦點,您也可以使用工作人員擁有仍然可以運行的代碼,但不允許工作人員訪問 DOM,因此您無法在頁面上進行任何可見的更新。

這是一個簡單的例子:index.html

<!DOCTYPE html>
<html>
<body>
<button onclick="startWorker()">Start Worker</button>
<button onclick="stopWorker()">Stop Worker</button>

<script>
let w;

function startWorker() {
  if (typeof(Worker) !== "undefined") {
    if (typeof(w) == "undefined") {
      w = new Worker("webWorker.js");
    } 
  }  
}

function stopWorker() {
  w.terminate();
  w = undefined;
}
</script>

</body>
</html>

webWorker.js

let max = 0 

let consoleLogWorker = () => {
  console.log("background log")
  max+= 1
  if(max < 50) setTimeout("consoleLogWorker()",500);
 
}

consoleLogWorker();

如果您運行上面的示例,您將在啟動 worker 后看到,即使您離開啟動 worker 的頁面,它仍然會在控制台中打印。

但同樣,您不能直接訪問 web worker 中的 DOM。

您應該嘗試使用Via.js ,它可以讓您訪問工作人員“內部”的 DOM,這在過去並不是一個可行的解決方案,因為它會造成 memory 泄漏,但在 Chrome 84+ 中默認啟用了 WeakRefs,因此它不應該在較新的瀏覽器上創建 memory 泄漏。

我使用 via 創建一個 chrome 擴展,在后台設置計時器,然后使用 web 工作人員更改網站的圖標 這里是源https://gitlab.flashsoft.eu/chrome-extensions/tab-timer-alert也許它會幫你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM