溫度轉換器來源檔案

溫度轉換器的來源檔案 漸進式 Web 應用程式 (PWA) 範例。

另請參閱:

原始程式碼檔案概觀

Progressive Web App (PWA) 範例包含下列檔案 /Demos/temperature-converter/ ,位於原始程式碼目錄中:

檔案 描述 下一節
index.html 定義應用程式 UI 中顯示內容和控制項的初始網頁。 此範例 PWA 只有一個網頁。 應用程式的初始網頁 (index.html)
converter.css CSS) 檔案 (串聯樣式表定義應用程式網頁的樣式;應用程式主頁面中每個 UI 控制項的版面配置樣式。 JavaScript 應用程式邏輯檔案 (converter.js)
converter.js 應用程式邏輯,做為 JavaScript 程式碼。 JavaScript 應用程式邏輯檔案 (converter.js)
manifest.json 應用程式的基本資訊,供裝置作業系統使用。 與一般 Web 應用程式不同,可將漸進式 Web 應用程式 (PWA) 安裝在裝置上的資訊清單檔案。 Web 應用程式資訊清單 (manifest.json)
icon512.png 在瀏覽器和本機裝置上代表應用程式的影像檔案。 代表應用程式 (icon512.png) 的影像檔案
sw.js 在沒有網際網路連線時,在本機裝置上快取前端檔案並提供快取檔案的服務工作者。 在) (sw.js 快取本機裝置上應用程式檔案的服務工作者
README.md 有關應用程序的簡要信息,供正在查看源代碼目錄的人使用;包含從 github.io Web 伺服器存取即時應用程式的連結,以及本文的連結。 說明來源檔案目錄的讀我檔案 (README.md)

以下是每個檔案的詳細資料。

應用程式的初始網頁 (index.html)

index.html 定義使用者存取漸進式 Web 應用程式 (PWA) 時所看到的第一頁。

index.html 會定義漸進式 Web 應用程式 (PWA) 的網頁內容,包括出現在使用者介面中的文字、影像、文字欄位和按鈕。

<!DOCTYPE html>
<html lang="en-US" dir="ltr">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width,initial-scale=1" />
    <link rel="icon" type="image/png" href="./icon512.png">
    <link rel="stylesheet" href="./converter.css">
    <link rel="manifest" href="./manifest.json">
    <title>Temperature converter</title>
  </head>
  <body>
    <form id="converter">
       ...
    </form>
    <script src="./converter.js"></script>
    <script>
      if('serviceWorker' in navigator) {
        navigator.serviceWorker.register('./sw.js', { scope: './' });
      }
    </script>
  </body>
</html>

index.html 如何參照 CSS 檔案

index.html透過標籤內<head>的一行程式碼參照 converter.css CSS 檔案:

<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width,initial-scale=1" />
  <link rel="icon" type="image/png" href="./icon512.png">
  <link rel="stylesheet" href="./converter.css">
  <link rel="manifest" href="./manifest.json">
  <title>Temperature converter</title>
</head>

index.html 如何載入 JavaScript 檔案

在 ,index.html在結束</form>標籤之後,會converter.js載入一個<script>元素:

  <output name="output-temp" id="output-temp" for="input-temp input-unit output-unit">68 F</output>
</form>
<script src="./converter.js"></script>

相反地, converter.js 在下列行中參照表單的 id: converter :

const form = document.getElementById('converter');

如何 index.html 參照資訊清單

在標籤內<head>,元素會<link>參照:manifest.json

<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width,initial-scale=1" />
  <link rel="icon" type="image/png" href="./icon512.png">
  <link rel="stylesheet" href="./converter.css">
  <link rel="manifest" href="./manifest.json">
  <title>Temperature converter</title>
</head>

此 <link rel="manifest" href="./manifest.json"> 元素會將 Web 應用程式資訊清單檔案連結至應用程式,讓 Web 應用程式成為漸進式 Web 應用程式 (PWA) 。

檔案名稱 manifest.json 只是一個通用約定,而不是嚴格的要求。 例如,您可以將資訊清單檔案名稱變更為 abcd.json,並將其中 index.html 的行修改為:

<link rel="manifest" href="./abcd.json">

index.html 如何參照服務工作者

在標籤結<body>尾的元素中<script>,服務工作者檔案sw.js會透過呼叫來navigator.serviceWorker.register()註冊:

    <output name="output-temp" id="output-temp" for="input-temp input-unit output-unit">68 F</output>
  </form>
  <script src="./converter.js"></script>
  <script>
    if('serviceWorker' in navigator) {
      navigator.serviceWorker.register('./sw.js', { scope: './' });
    }
  </script>
</body>

CSS 樣式表檔案 (converter.css)

converter.css 使用串聯樣式表 (CSS) 規則來組織版面配置中的 HTML 內容,並提供元素樣式,藉此定義漸進式 Web 應用程式 (PWA) 網頁的樣式。

Web 應用程式具有 CSS 樣式規則,以使應用程式具有視覺吸引力。

CSS 檔案位於 converter.css 範例的目錄 (/Demos/temperature-converter/) ,包括下列程式碼:

html {
  background: rgb(243, 243, 243);
  font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
  font-size: 15pt;
}

html, body {
  height: 100%;
  margin: 0;
}

body {
  display: grid;
  place-items: center;
}

#converter {
  ...
}

#converter input, #converter select {
  ...
}

#converter #output-temp {
  ...
}

JavaScript 應用程式邏輯檔案 (converter.js)

為了讓溫度轉換器運作,範例在 中使用 JavaScript 程式碼。converter.js converter.js 包含漸進式 Web 應用程式 (PWA) 的應用程式邏輯。 JavaScript 程式碼會在使用者介面中新增使用者互動。

const inputField = document.getElementById('input-temp');
const fromUnitField = document.getElementById('input-unit');
const toUnitField = document.getElementById('output-unit');
const outputField = document.getElementById('output-temp');
const form = document.getElementById('converter');

function convertTemp(value, fromUnit, toUnit) {
  if (fromUnit === 'c') {
    ...
    return value;
  }
  throw new Error('Invalid unit');
}

form.addEventListener('input', () => {
  const inputTemp = parseFloat(inputField.value);
  ...
  outputField.value = (Math.round(outputTemp * 100) / 100) + ' ' + toUnit.toUpperCase();
});

Web 應用程式資訊清單 (manifest.json)

manifest.json 提供漸進式 Web 應用程式 (PWA) 的基本資訊,供裝置作業系統使用。 JSON 程式碼會向主機作業系統描述應用程式。

{
  "lang": "en-us",
  "name": "Temperature converter app",
  "short_name": "Temperature converter",
  "description": "A basic temperature converter application that can convert to and from Celsius, Kelvin, and Fahrenheit",
  "start_url": "./",
  "background_color": "#2f3d58",
  "theme_color": "#2f3d58",
  "orientation": "any",
  "display": "standalone",
  "icons": [
      {
          "src": "./icon512.png",
          "sizes": "512x512"
      }
  ]
}

另請參閱:

代表應用程式 (icon512.png) 的影像檔案

icon512.png 是 512x512 像素的應用程式圖示影像。 此影像檔代表漸進式 Web 應用程式 (PWA) ,例如在 Windows 工作列和 Windows [開始] 功能表中:

圖示檔案

在) (sw.js 上快取應用程式檔案的服務工作者

sw.js 是一個服務工作者,可管理屬於 Progressive Web App (PWA) 一部分的快取檔案,將檔案快取到本機磁碟機,並在沒有網際網路連線時提供檔案。

const CACHE_NAME = `temperature-converter-v1`;
   
// Use the install event to pre-cache all initial resources.
self.addEventListener('install', event => {
  event.waitUntil((async () => {
    const cache = await caches.open(CACHE_NAME);
    cache.addAll([
      './',
      './converter.js',
      './converter.css'
    ]);
  })());
});

self.addEventListener('fetch', event => {
  event.respondWith((async () => {
    const cache = await caches.open(CACHE_NAME);

    // Get the resource from the cache.
    const cachedResponse = await cache.match(event.request);
    if (cachedResponse) {
      return cachedResponse;
    } else {
        try {
          // If the resource was not in the cache, try the network.
          const fetchResponse = await fetch(event.request);
   
          // Save the resource in the cache and return it.
          cache.put(event.request, fetchResponse.clone());
          return fetchResponse;
        } catch (e) {
          // The network failed
        }
    }
  })());
});

Service Worker 會將三個檔案新增至快取,明確 (.html、 .css及 .js) 。 瀏覽器會自動快取 (.png) 圖示和資訊清單 (.json) 。

另請參閱:

說明來源檔案目錄的讀我檔案 (README.md)

README.md 包含有關漸進式 Web 應用程式 (PWA) 的簡要資訊:

漸進式 Web 應用程式的主要目錄 (PWA) 的原始程式碼可以包含讀我檔案。 應用程式的使用者不會看到原始程式碼目錄或讀我檔案。

另請參閱

原始程式碼: