Các quy tắc cơ bản của HTML5, Phần 3: Sức mạnh của các API HTML5
Cập nhật: 10.11.2012 02:12
HTML5 phản ánh những thay đổi to lớn theo cách mà bây giờ bạn đang kinh doanh trên web và trong đám mây. Bài viết này là bài thứ ba trong một loạt bài bốn phần được thiết kế để làm sáng tỏ những thay đổi trong HTML5, bắt đầu bằng các thẻ mới và tổ chức trang và cung cấp thông tin cấp cao về thiết kế trang web, việc tạo các mẫu biểu, việc sử dụng và giá trị của các API; và cuối cùng, các khả năng sáng tạo mà Canvas (Khung nền ảnh) cung cấp. Phần đăng này giới thiệu các API HTML5, bằng cách sử dụng một trang mẫu để giải thích các hàm.

Vậy, một API là gì?

Một giao diện lập trình ứng dụng (API) là một bộ sưu tập các lệnh và các tiêu chuẩn lập trình để truy cập một ứng dụng phần mềm. Với API, bạn có thể thiết kế các sản phẩm được hỗ trợ bởi dịch vụ mà API cung cấp.

HTML5 có một số API mới. Ví dụ:

  • Một API vẽ 2D được dùng với phần tử canvas mới để biểu diễn các biểu đồ hoặc hình ảnh trực quan khác.
  • Một cơ cấu bộ nhớ đệm API để hỗ trợ các ứng dụng web không nối mạng.
  • Một API để phát video và âm thanh được dùng với các phần tử video và âm thanh mới.
  • Một API lịch sử làm cho có khả năng truy cập lịch sử duyệt web và cho phép các trang web thêm vào nó.
  • Một API kéo-và-thả để sử dụng với các thuộc tính draggable (có khả năng kéo).
  • Một API chỉnh sửa để sử dụng với thuộc tính contenteditable (có khả năng chỉnh sửa nội dung).
  • Lưu trữ phía máy khách với các API JavaScript cho các cặp giá trị-khóa và các cơ sở dữ liệu SQL nhúng.

Bài viết này tập trung vào hai API: Geolocation (Định vị địa lý) và Web Worker (Trình làm việc trên nền Web). Đầu tiên, bài viết phân tích chính các API đó, rồi, bạn tạo một trang có chứa cả hai API này. 

Kinh doanh khắp mọi nơi: Định vị địa lý

Bạn sử dụng Geolocation API (API Định vị địa lý) để xác định và chia sẻ các vị trí địa lý. API này trả về các tọa độ kinh độ và vĩ độ — thông tin mà các doanh nghiệp có thể sử dụng để cung cấp dịch vụ trong vùng gần đúng tọa độ. Những dịch vụ này thường được gọi là các dịch vụ dựa vào vị trí (LBS).

LBS đề cập đến các nguồn dữ liệu địa lý được dùng để xác định vị trí vật lý của thiết bị đang bị theo dõi và, do đó, con người có liên quan đến vị trí đó. Chức năng này cung cấp cho các bên quan tâm cơ hội để tương tác với cá nhân đó dựa vào thị trường với một số điểm trung tâm-định vị địa lý quan tâm.

Kinh doanh thực sự liên quan đến việc tạo ra chất lượng, tiện ích, và giá trị cho các khách hàng, trong khi đồng thời tạo ra lợi ích kinh tế và tài chính cho các bên liên quan, các chủ nợ, các cổ đông, các nhân viên, và các nhà cung cấp. LBS có hỗ trợ - Định vị địa lý giúp việc bám sát và theo dõi một gói bưu kiện hay một người dễ dàng hơn khi sử dụng một thiết bị không có trình duyệt hoặc có trình duyệt. Về thương mại, việc định vị địa lý có liên quan đến tất cả việc sử dụng các tài sản địa lý để xác định nơi một người nào đó hoặc một cái gì đó có ở vị trí đó, rồi bán tập thông tin cụ thể đó cho bất kỳ ai muốn sử dụng nó cho các mục đích xã hội, thương mại, hoặc các mục đích khác, dựa vào sự cho phép hợp pháp từ chủ sở hữu thông tin để làm như vậy.

Định vị địa lý hoạt động như thế nào

Geolocation API (API Định vị địa lý) được dựa vào một đặc tính của đối tượng navigator chung: navigator.geolocation. Đối tượng JavaScript navigator cung cấp thông tin có ích về trình duyệt và hệ thống của khách truy cập. Việc định vị địa lý có thể xác định vĩ độ và kinh độ bằng các địa chỉ IP, cơ sở dữ liệu dựa trên-web, các kết nối mạng không dây, và công nghệ phép đo tam giác hoặc GPS (Hệ thống định vị toàn cầu). Cần lưu ý rằng độ chính xác của thông tin định vị địa lý được cung cấp khác nhau dựa trên các phương tiện thu nhận thông tin. Đôi khi, và ở một số địa điểm, bạn có thể không có khả năng nhận được một kết quả định vị đầy đủ hoặc bất kỳ dữ liệu nào.

Các kịch bản lệnh có thể sử dụng đối tượng navigator.geolocation để xác định thông tin vị trí liên quan đến thiết bị lưu trữ của người dùng. Sau khi lấy ra thông tin vị trí, hãy tạo một đối tượng vị trí và đặt nó chung với dữ liệu.

Đối tượng navigator.geolocation có ba phương thức:

  • getCurrentPosition()
  • watchPosition()
  • clearWatch()

Phương thức getCurrentPosition()

Phương thức getCurrentPosition() lấy ra vị trí hiện tại của người dùng, nhưng chỉ một lần. Khi được một kịch bản lệnh gọi, phương thức này cố gắng thu nhận vị trí hiện tại của thiết bị lưu trữ theo cách không đồng bộ. Truyền thông không đồng bộ có nghĩa là người gửi và người nhận không đồng thời được tham gia vào truyền thông. Sử dụng truyền thông không đồng bộ cho phép trình duyệt tiếp tục các hoạt động khác sao cho nó không phải chờ đợi một đáp ứng từ thực thể đang thu nhận.

Phương thức getCurrentPosition() có thể có đến ba đối số:

  • geolocationSuccess. Gọi lại với vị trí hiện tại (bắt buộc)
  • geolocationError. Gọi lại nếu có một lỗi (tùy chọn)
  • geolocationOptions. Các tùy chọn định vị địa lý (tùy chọn)

Phương thức navigator.geolocation.getCurrentPositon() trả về vị trí hiện tại của thiết bị lưu trữ theo cuộc gọi lại geolocationSuccess với một đối tượng Position làm tham số. Nếu có một lỗi, cuộc gọi lại geolocationError được gọi ra với một đối tượng PositionError. Bạn có thể thiết lập ba đặc tính cho geolocationOptions: enableHighAccuracy, timeout, và maximumAge. Các đặc tính tùy chọn này có khả năng chính xác cao, nếu thiết bị hỗ trợ, tương ứng là, một khoảng thời gian chờ để trả về một vị trí, và một khoảng thời gian tối đa để có thể sử dụng một vị trí đã lưu trữ.

Phương thức getCurrentPosition() được gọi như được hiển thị dưới đây:

void navigator.geolocation.getCurrentPosition(
          geolocationSuccess, geolocationError, geolocationOptions);

Phương thức watchPosition()

Phương thức watchPosition() thăm dò vị trí người dùng một cách thường xuyên, theo dõi để xem liệu vị trí người dùng đã thay đổi chưa. Nó có thể có đến ba đối số.

Khi watchPosition được gọi, nó bắt đầu một quá trình theo dõi không đồng bộ liên quan đến việc thu nhận một đối tượng Position mới và tạo watchID. Nếu việc thu nhận này thành công geolocationSuccess liên quan với một đối tượng Position làm đối số được gọi ra. Dựa vào lỗi liên quan đến một phương thức được gọi ra với một đối số geolocationError khác không, phương thức này tạo geolocationError với một đối tượng PositionError làm đối số. Khi vị trí thiết bị thay đổi, một cuộc gọi lại thích hợp với đối tượng Position mới được gọi ra.

Phương thức watchPosition() được gọi như được hiển thị dưới đây:

long navigator.geolocation.watchPosition(
          geolocationSuccess, geolocationError, geolocationOptions);

Phương thức clearWatch()

Phương thức clearWatch() kết thúc một phương thức watchPosition() đang diễn ra. Phương thức này có thể chỉ có một đối số. Khi được gọi, nó tìm đối số watchID đã khởi động trước đây và dừng ngay nó lại.

Phương thức clearWatch() được gọi như được hiển thị dưới đây:

void navigator.geolocation.clearWatch(watchID)

Dữ liệu định vị địa lý: Đối tượng Position

Geolocation API trả về một đối tượng Position (vị trí địa lý). Đối tượng này có hai đặc tính: timestampcoords. Đặc tính timestamp (dấu thời gian) cho biết thời điểm tạo ra dữ liệu định vị địa lý. Đặc tính coords (các tọa độ) có bảy thuộc tính:

  • coords.latitude. Vĩ độ ước tính
  • oords.longitude. Kinh độ ước tính
  • coords.altitude. Độ cao ước tính
  • coords.accuracy. Độ chính xác của vĩ độ và kinh độ được cung cấp ước tính theo mét
  • coords.altitudeAccuracy. Độ chính xác của độ cao được cung cấp ước tính theo mét
  • coords.heading. Hướng di chuyển hiện tại đối với thiết bị đang lưu trữ trên máy chủ theo độ, tính theo chiều kim đồng hồ liên quan đến cực Bắc thực
  • coords.speed. Tốc độ dưới đất hiện tại của thiết bị theo mét/giây

Chỉ có ba trong số các thuộc tính được bảo đảm là: coords.latitude, coords.longitude, và coords.accuracy. Các thuộc tính còn lại trả về null (không), tùy thuộc vào các khả năng của thiết bị của bạn và máy chủ định vị tầng sau mà nó trao đổi. Các thuộc tính headingspeed (tốc độ) được tính toán dựa trên vị trí trước đó của người dùng, nếu có thể. 

Các trình làm việc trên nền web đến giải cứu

Web workers (Các trình làm việc trên nền web) khắc phục các vấn đề gây ra bởi tính đồng thời. Web workers là câu trả lời của họ HTML5 cho vấn đề đơn-luồng của JavaScript: Chúng chạy các quá trình trên một luồng riêng biệt từ trang chính, bảo vệ trang với các chức năng chính, chẳng hạn như duy trì một giao diện người dùng ổn định.

Một web worker là một tệp JavaScript được nạp và được thực hiện trong nền. Các web worker này cho phép bạn tải một tệp JavaScript động, và sau đó thực hiện một kịch bản lệnh bằng cách sử dụng một quá trình nền mà không ảnh hưởng đến giao diện người dùng. Các web worker có quyền truy cập hạn chế và chỉ được phép truyền qua các chuỗi. Vì web worker không sử dụng luồng giao diện người dùng của trình duyệt, nên chúng không được phép truy cập vào DOM. Các worker có thể sử dụng cả hai tham chiếu selfthis cho phạm vi chung của worker. Truyền dẫn của worker và trang cha mẹ đạt được bằng cách sử dụng một mô hình sự kiện và phương thức postMessage().

Vì Web workers có cách hoạt động đa luồng, nên chúng chỉ có thể truy cập một tập con của các tính năng của JavaScript. Web workers có thể:

  • Truy cập đối tượng navigator.
  • Sử dụng đối tượng vị trí chỉ-đọc.
  • Thực hiện XMLHttpRequest để gửi các yêu cầu HTTP hoặc HTTPS.
  • Thiết lập một thời gian hoặc khoảng thời gian cho một hoạt động bằng cách sử dụng setTimeout()/clearTimeout()setInterval()/clearInterval().
  • Truy cập bộ nhớ ứng dụng.
  • Nhập khẩu kịch bản lệnh bên ngoài bằng cách sử dụng phương thức importScripts().
  • Sinh ra các Web worker khác (worker con - subworker - phải có cùng nguồn gốc như trang chính và được đặt trong cùng một vị trí như worker mẹ).

Có hai kiểu web workers: các worker chuyên dụng và các worker chia sẻ.

Web worker chuyên dụng

Một web worker chuyên dụng được liên kết đến kịch bản lệnh tạo ra nó, và nó có thể truyền thông với các thành phần worker hoặc trình duyệt khác. Tuy nhiên, nó không thể truyền thông với các DOM.

Một web worker chuyên dụng được tạo ra bằng cách chuyển một tên tệp JavaScript tới một cá thể worker mới. Bạn tạo ra một worker mới khi sử dụng hàm tạo Worker() bằng cách chỉ rõ địa chỉ URI của kịch bản lệnh đang thực hiện của worker. Để tạo ra một worker chuyên dụng, hãy nhập mã được hiển thị dưới đây, mã này tạo ra một đối tượng Worker chuyên dụng mới Worker:

var worker = new Worker('worker.js');

Các web worker chia sẻ

Các web worker chia sẻ, giống như các worker chuyên dụng, không thể truy cập vào DOM và chỉ có quyền truy cập hạn chế vào các đặc tính cửa sổ. Các web worker chia sẻ chỉ có thể truyền thông với các web worker chia sẻ khác của cùng một miền. Các worker này được tạo ra bằng cách chuyển một tên JavaScript tới một cá thể worker chia sẻ mới..

Các kịch bản lệnh trang có thể truyền thông với các web worker chia sẻ. Tuy nhiên, không giống như các web worker chuyên dụng, bạn truyền thông bằng cách sử dụng một đối tượng port (cổng) và gán cho một trình xử lý sự kiện thông báo. Ngoài ra, bạn phải gọi phương thức start() của port trước khi sử dụng phương thức postMessage() đầu tiên.

Dựa vào việc nhận được thông báo đầu tiên bằng kịch bản lệnh web worker, web worker chia sẻ gán một trình xử lý sự kiện cho cổng hoạt động. Nói chung, trình xử lý sẽ chạy phương thức postMessage() riêng của nó để trả về một thông báo tới mã đang gọi, và sau đó phương thức start() của port tạo một quá trình thông báo cho phép.

Để tạo ra một web worker chia sẻ, bạn phải tạo một đối tượng SharedWorker thay cho đối tượng Worker. Đoạn mã sau đây cho thấy cách tạo một đối tượng SharedWorker mới:

var worker = new SharedWorker('worker.js');

Dựng một trang có cả hai API

Bạn sẽ thiết kế một trang có chứa các mô hình làm việc cơ bản của cả Geolocation API và Web Worker API. Ngoài ra, bạn sử dụng Google Map API (API bản đồ của Google) để đưa ra dữ liệu đã tích lũy làm một bản đồ.

Trang này được thiết lập như trong Hình 1. Trang này bao gồm một vùng Header được tạo ra bằng cách sử dụng các thẻ <header></header>, một vùng Section được tạo ra bằng cách sử dụng các thẻ <section></section>, và một vùng Aside được tạo ra bằng cách sử dụng các thẻ <aside></aside>.


Hình 1. Bố trí trang API
Ba hộp: một header mở rộng trên một hộp section ở bên trái chứa geolocation api      và một hộp aside ở bên phải chứa worker api.

Các vùng <section><aside> chứa các API. Vùng Section chứa Geolocation API. Vùng Aside chứa web worker, tính các số nguyên tố.

Khi được thực hiện, trang web này được hiển thị trong Hình 2. Để xem các dữ liệu định vị địa lý, trước tiên bạn phải đồng ý chia sẻ thông tin của bạn. Web worker khởi động khi nạp trang. Nếu bạn muốn xem các số nguyên tố được tìm thấy, hãy nhấn vào Display Web Worker (Hiển thị trình làm việc trên nền web).


Hình 2. Trang web API
Trang cho thấy một bản đồ và các tọa độ thông tin định vị địa lý.

Tệp HTML

Tệp HTML bắt đầu bằng thông tin HTML5 chuẩn như trong Liệt kê 1. Phần <head> chứa một cuộc gọi đến Google Maps API, thiết lập giá trị của bộ cảm biến là False (Sai). Việc sử dụng Google Maps API đòi hỏi bạn cho biết ứng dụng của bạn có đang sử dụng một bộ cảm biến, chẳng hạn như GPS, để thiết lập vị trí không. Bạn phải khai báo một giá trị tham số cảm biến là True (Đúng) hay False (Sai) cho ứng dụng Google Maps API của bạn. Cần phải khai báo một giá trị cảm biến. Thẻ <head> cũng chứa các liên kết đến các tệp JavaScript và sử dụng CSS3 để xử lý các hàm và định dạng trang web.


Liệt kê 1. Bắt đầu tệp HTML
	
<!doctype html>
<html>
<head>
  <title>Basic GeoLocation Map & Web Worker Prime Number Calculator</title>
  <script src="http://maps.google.com/maps/api/js?sensor=false" 
           type="text/javascript"></script>
  <LINK href="GeolocationWebWorker.css" rel="stylesheet" type="text/css">
  <script src="HTML-Part3-GeolocationWebWorker.js" type="text/javascript"></script>
</head>

Thẻ <body> chứa một sự kiện onLoad gọi hàm khởi tạo để định vị vị trí địa lý, như trong Liệt kê 2. Hàm này xác minh xem có thể sử dụng định vị vị trí địa lý trong trình duyệt này không. Hàm khởi tạo này có trong tệp JavaScript. Nếu trình duyệt có thể truyền thông với Geolocation API, bản đồ sẽ được hiển thị.


Liệt kê 2. Khởi tạo định vị địa lý
	
<body onLoad="initGeoApp();">
  <header>
    <hgroup>
      <h1>Geolocation & Web Worker</h1>
      <h2>Making it work</h2>
    </hgroup>
  </header>

Thẻ <section> được hiển thị trong Liệt kê 3 có chứa các thông tin kết quả đầu ra hiển thị cho đối tượng navigator.geolocation. Một canvas bản đồ được tạo ra bằng cách sử dụng các kinh độ và vĩ độ do API trả về. Dữ liệu Position coords cũng được hiển thị khi sử dụng các thẻ <span></span>.


Liệt kê 3. Bản đồ và vị trí của định vị địa lý
	
<section>
    <p>This is the geolocation example map.</p>
    <div id="map_canvas" ></div>

    <p>This is the output from the navigator.geolocation object.</p>
    <table>
    <tr>
        <td>accuracy:</td>
        <td><span id="accuracyOutput"></span></td>
    </tr>
    <tr>
        <td>altitude:</td>
        <td><span id="altitudeOutput"></span></td>
    </tr>
    <tr>
        <td>altitudeAccuracy:</td>
        <td><span id="altitudeAccuracyOutput"></span></td>
    </tr>
    <tr>
        <td>heading:</td>
        <td><span id="headingOutput"></span></td>
    </tr>
    <tr>
        <td>latitude:</td>
        <td><span id="latitudeOutput"></span></td>
    </tr>
    <tr>
        <td>longitude:</td>
        <td><span id="longitudeOutput"></span></td>
    </tr>
    <tr>
        <td>speed:</td>
        <td><span id="speedOutput"></span></td>
    </tr>
    </table>
   </section>
  <aside>
    <p>This is the Web Worker. </p>
    <p>Prime number calculation result:
    <output id="result"></output></p>

Web Worker tính các số nguyên tố. Bạn sử dụng thẻ <output> mới để hiển thị tính toán do web worker tạo ra. ID được gán trong thẻ <output> có cùng mã ID JavaScript sử dụng để xác định tính toán mà nó thực hiện. Các ID (mã định danh) được sử dụng trong các thẻ <span><output> cho phép truy cập vào DOM. Không có ID tham chiếu, mã JavaScript sẽ không biết sử dụng <span> hay <output>. Liệt kê 4 cho thấy kết quả đầu ra từ web worker.


Liệt kê 4. Kết quả đầu ra của Web worker
	
  <aside>
    <p>This is the Web Worker. </p>
    <p>Prime number calculation result:
    <output id="result"></output></p>

onClick được dùng trong thẻ <input> để trước tiên hiển thị các giá trị đang được web worker Số nguyên tố (Prime Number web worker) tính toán, và sau đó onClick thứ hai được sử dụng để dừng web worker. Liệt kê 5 cho thấy đoạn mã này. Hàm displayWorker() làm cho các tính toán của web worker được hiển thị khi nhấn vào nút này. Web worker đã bắt đầu tính các số nguyên tố khi trang đã được nạp.


Liệt kê 5. Các đầu vào cho web worker
	
    <input type="button" value="Display Web Worker" onClick="displayWorker();">
    <input type="button" value="Stop Web Worker"    onClick="stopWorker();">

  </aside>
</body>
</html> 

Tệp JavaScript

JavaScript là máy phía sau các API được trưng bày trên trang mẫu này. Geolocation API được khởi tạo bằng hàm initGeoApp(). Đây là hàm được thực hiện bằng sự kiện onLoad() trong thẻ <body>: Nó xác định xem trình duyệt của bạn có thể sử dụng định vị địa lý không (xem Liệt kê 6). Nếu trình duyệt của bạn có thể sử dụng định vị địa lý, thì Geolocation API được gọi. Nếu thành công, bản đồ được vẽ bằng cách sử dụng các thuộc tính Position. Các giá trị của các thuộc tính này sau đó được in dưới bản đồ.


Liệt kê 6. Các hàm định vị địa lý
	
function initGeoApp()
  {
   if( navigator.geolocation )
     { 
        navigator.geolocation.getCurrentPosition( success, failure);
     }
    else
     {
        alert("Your browser does not support geolocation services.");
    }
   }

Các giá trị được lấy ra bằng document.getElementById, dựa trên ID mà bạn đã cung cấp trong tệp HTML. document.getElementById là một phương thức của đối tượng tài liệu và được truy cập bằng document.getElementById, như trong Liệt kê 7. Các giá trị của các thuộc tính Position được lưu trữ ở đây sao cho chúng có thể được sử dụng để in các thuộc tính dưới bản đồ được hiển thị.


Liệt kê 7. Sử dụng getElementById để nhận được các giá trị coords
	
	     var map;
	     function success(position)
	     {
            document.getElementById("accuracyOutput").innerHTML = 
			     position.coords.accuracy;
            document.getElementById("altitudeOutput").innerHTML = 
			     position.coords.aktitude;
            document.getElementById("altitudeAccuracyOutput").innerHTML = 
			     position.coords.altitudeAccuracy;
            document.getElementById("headingOutput").innerHTML = 
			     position.coords.heading;
            document.getElementById("latitudeOutput").innerHTML = 
			     position.coords.latitude;
            document.getElementById("longitudeOutput").innerHTML = 
			     position.coords.longitude;
            document.getElementById("speedOutput").innerHTML = 
			     position.coords.speed;

Phần này định nghĩa các tọa độ cho đối tượng LatLng của Google Map API, như Liệt kê 8 cho thấy. Đối tượng LatLng của Google Map API cung cấp thông tin tọa độ cần thiết để tạo ra một bản đồ. Bạn có thể thiết lập mức độ phóng to hay thu nhỏ và một số tùy chọn khác để tạo dáng vẻ của bản đồ được đưa ra cho người dùng.


Liệt kê 8. Các tùy chọn Bản đồ của Google
	
var coordinates = new google.maps.LatLng(position.coords.latitude, 
     position.coords.longitude);

	 
var myOptions =
  {
    zoom: 14,
    center: coordinates,
    mapTypeControl: false,
    navigationControlOptions: {style: google.maps.NavigationControlStyle.small},
    mapTypeId: google.maps.MapTypeId.ROADMAP  
  };

Lưu ý rằng trong tùy chọn mapTypeID, hãy chọn tùy chọn ROADMAP. Giá trị này trình bày bản đồ sao cho nó xuất hiện như trong Hình 2. Có bốn giá trị có thể:

  • ROADMAP (Lộ trình)
  • HYBRID (Lai)
  • SATELLITE (Vệ tinh)
  • TERRAIN (Địa hình)

Hình 3 cho thấy trang này sẽ xuất hiện như thế nào với tùy chọn HYBRID được chọn.


Hình 3. Trang web API với bản đồ lai
Trang cho thấy một bản đồ và các tọa độ thông tin định vị địa lý.

Tạo bản đồ bằng cách sử dụng ID map_canvas, đó là ID cho <div> trong tệp HTML:

map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

Đặt một điểm dấu vị trí ban đầu trên bản đồ. Liệt kê 9 cho thấy mã này.


Liệt kê 9. Đặt một điểm dấu bản đồ ban đầu
	
      var marker = new google.maps.Marker({
        position: coordinates,
        map: map,
        title: "You are here."
        });
       }
	 
       function failure()
       {
          alert("Sorry, could not obtain location");
        }

Web worker bắt đầu thực hiện khi khởi tạo trang này. Nếu người dùng muốn hiển thị kết quả đầu ra của các tính toán đang được thực hiện, họ có thể nhấn vào Display Web Worker, sẽ gọi hàm displayWorker(). Liệt kê 10 cho thấy đoạn mã này.


Liệt kê 10. Web worker
	
     var worker = new Worker('PrimeNumberWebWorker.js');

  function displayWorker()  
  {
         worker.onmessage = function (event) 
           {            
             document.getElementById('result').innerHTML = event.data;
           };
    }

Nếu người dùng muốn dừng web worker, họ có thể nhấn vào Stop Web Worker (Dừng Web Worker), sẽ gọi hàm stopWorker(), được hiển thị trong Liệt kê 11.


Liệt kê 11. Kết thúc worker
	
 function stopWorker() 
   {
       worker.terminate();
     }

Tệp web worker

Tệp này là web worker của trình tính số nguyên tố: nó tính tất cả số nguyên tố cho đến khi bị dừng lại. Liệt kê 12 cho thấy đoạn mã này.


Liệt kê 12. Tính các số nguyên tố
	
var n = 1;
search: while (true) {
   n += 1;
   for (var i = 2; i <= Math.sqrt(n); i += 1)
      if (n % i == 0)
         continue search;
  postMessage(n);
}

Tệp CSS3

Tệp CSS3 được hiển thị trong Liệt kê 13 cung cấp định dạng hiển thị trong trang HTML5.


Liệt kê 13. Các mô tả CSS3
	
* {font-family: Arial,Helvetica,sans-serif ;
}

body {
  margin: 0 300px 0 300px;
  color: #990000;
  background-color:#FFFFCC;
}

header > hgroup h1 {
  margin: 0 0 3px 0;
  padding: 0;
  text-align: center;
   font-size: 30px;
}


header > hgroup h2 {
  margin: 0 0 15px 0;
  padding: 0;
  text-align: center;
  font-style: italic;
   font-size: 12px;
}


header p {
  margin: 0 0 20px 0 ;
  padding: 0;
  text-align: center;
   font-size: 12px;
}

aside {
  width: 200px;
  height: 175px;
  margin: -450px 0 0 450px;
  background-color:  #990000;
  padding: .5px 0 0 10px ; 
  color:#FFFFFF;
  font-weight:bold;
}

div {
  width: 400px; 
  height: 250px; 
}

Kết luận

Phần đăng này đã xem xét các tiện ích của Geolocation API và Web Worker API. Hai API này đã được chọn vì chúng cùng chứng tỏ cả hai cách sử dụng sáng tạo và thực tế của các API. Định vị địa lý là một ví dụ hay về việc sử dụng đặc tả HTML5 trong việc tạo ra các mô hình kinh doanh mới. Tương tự như vậy, vai trò của Web Worker là giải quyết về những vấn đề cố hữu trong vấn đề xảy ra đồng thời của JavaScript.

Cả hai API này cùng minh họa một sự kết hợp mô hình sử dụng HTML5 để sử dụng cho thương mại và xã hội. Vì vậy, tiện ích của chúng chứng tỏ sự tạo điều kiện thuận lợi thích hợp và sự quản lý chung của một ứng dụng Internet phong phú của HTML5.