首頁 > web前端 > js教程 > 主體

JavaScript新知:service workers

阿神
發布: 2017-01-24 14:30:41
原創
1360 人瀏覽過

前端技術正在像桌面技術靠近,其中一項很重要的就是service workers,它讓HTML App離線工作成為可能。本文會以一個簡單的案例程式碼來說明這項技術。我使用的工具:

1.瀏覽器版本為chrome 55

2.伺服器系統:Node 5.0

我們需要準備3個檔案:

touch  index.html b.html sw.js
登入後複製

其中檔案index.html內容為:

  <script>
    if (&#39;serviceWorker&#39; in navigator) {
      navigator.serviceWorker.register(&#39;/sw.js&#39;);
    }    </script>
登入後複製

它註冊一個

其中檔案index.html內容為:

   const cacheName = &#39;v1::static&#39;;    self.addEventListener(&#39;install&#39;, e => {
      e.waitUntil(
        caches.open(cacheName).then(cache => {          return cache.addAll([            &#39;/&#39;,
          ]).then(() => self.skipWaiting());
        })
      );
    });    self.addEventListener(&#39;fetch&#39;, event => {
      event.respondWith(
        caches.open(cacheName).then(cache => {          return cache.match(event.request).then(res => {            return res || fetch(event.request)
          });
        })
      );
    });
登入後複製

它註冊一個

其中檔案index.html內容為:

<h1>serviceWorker B</h1>
登入後複製

它註冊一個一個

其中檔案index.html內容為:

npm i http-server 
    http-server
登入後複製

它註冊一個service worker,檔案名稱為sw.js,一個JavaScript程式碼檔案。所以真正關鍵的檔案是sw.js,其內容為:

http://localhost:8080/index.html
登入後複製

作為一個事件,install會在ServiceWorker第一次裝入時被調用,此處你可以做一些初始化的工作,典型的工作是加載在離線時會需要的檔案到cache內。這裡我們制定了"/",因此任何內容都會被緩存下來。

第二個事件是fetch,當存取遠端資源時會被呼叫。這裡可以做一個匹配,如果在cache內有就曲cache內的資源返回,否則去遠端取。

第三個文件b.html就是一個為了演示離線效果的文件,內容為:

http://localhost:8080/b.html
登入後複製

雖然即可安裝http server,並在當前路徑內執行它:

 http://localhost:8080/b.html
登入後複製

訪問:

 chrome://inspect/#service-workers
登入後複製

reee

隨後,關閉http server,再次訪問

 chrome://serviceworker-internals/
登入後複製

居然可以訪問~,而這就是離線實現的效果。 🎜🎜嗯,想要查看service workers的運行狀況,還可以使用如下url來:🎜
http://caniuse.com/#feat=serviceworkers
登入後複製
🎜可以看到更加細節的是這個:🎜rrreee🎜在這裡可以啟動,撤銷註冊等操作。 🎜🎜可以查詢它的實作情況,還不是那麼樂觀:🎜rrreee
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!