คู่มือสําหรับนักพัฒนาซอฟต์แวร์

Embedded Audience API ให้คุณฝังเนื้อหาของหนังสือจาก Google Books ในหน้าเว็บของคุณได้โดยตรงด้วย JavaScript API นี้ยังให้บริการยูทิลิตีจํานวนมากสําหรับการควบคุมตัวอย่างหนังสืออีกด้วย และมักจะใช้ร่วมกับ API อื่นๆ ที่อธิบายไว้ในเว็บไซต์นี้ด้วย

วิซาร์ดพรีวิวเป็นเครื่องมือที่สร้างจาก API ผู้ดูแบบฝัง ซึ่งช่วยในการเพิ่มความสามารถในการแสดงตัวอย่างให้กับเว็บไซต์ โดยการคัดลอกโค้ดเพียงไม่กี่บรรทัด เอกสารนี้มีไว้สําหรับนักพัฒนาซอฟต์แวร์ขั้นสูงที่ต้องการปรับแต่งลักษณะที่ผู้ชมปรากฏในเว็บไซต์

ผู้ชม

เอกสารประกอบนี้ออกแบบมาเพื่อทําความคุ้นเคยกับการเขียนโปรแกรมแนวคิดการจัดโปรแกรมและออบเจ็กต์ คุณควรทําความคุ้นเคยกับ Google Books จากมุมมองของผู้ใช้ด้วย มีบทแนะนํา JavaScript จํานวนมากบนเว็บ

เอกสารประกอบแนวคิดนี้ไม่สมบูรณ์และครบถ้วน ซึ่งออกแบบมาเพื่อให้คุณเริ่มสํารวจและพัฒนาแอปพลิเคชันสุดเจ๋งได้อย่างรวดเร็วด้วย Embedded Reader API ผู้ใช้ขั้นสูงควรสนใจการอ้างอิง API ผู้ดูแบบฝัง ซึ่งให้รายละเอียดที่ครอบคลุมเกี่ยวกับวิธีและการตอบกลับที่รองรับ

ตามที่ระบุไว้ข้างต้น ผู้เริ่มต้นอาจต้องการเริ่มต้นด้วยวิซาร์ดการแสดงตัวอย่าง ซึ่งจะสร้างโค้ดที่จําเป็นในการฝังหน้าตัวอย่างพื้นฐานในเว็บไซต์ของคุณโดยอัตโนมัติ

"สวัสดี" โลกของ Embedded Audience API

วิธีที่ง่ายที่สุดในการเริ่มเรียนรู้เกี่ยวกับ Embedded Audience API คือดูตัวอย่างง่ายๆ หน้าเว็บต่อไปนี้แสดงตัวอย่างขนาด 600x500 ของ Mountain View โดย Nicholas Perry, ISBN 0738531367 (ส่วนหนึ่งของชุด "รูปภาพอเมริกา" ของ Arcadia Publishing)

<!DOCTYPE html "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title>Google Books Embedded Viewer API Example</title>
    <script type="text/javascript" src="https://www.google.com/books/jsapi.js"></script>
    <script type="text/javascript">
      google.books.load();

      function initialize() {
        var viewer = new google.books.DefaultViewer(document.getElementById('viewerCanvas'));
        viewer.load('ISBN:0738531367');
      }

      google.books.setOnLoadCallback(initialize);
    </script>
  </head>
  <body>
    <div id="viewerCanvas" style="width: 600px; height: 500px"></div>
  </body>
</html>

คุณดูตัวอย่างนี้และดาวน์โหลดเพื่อดาวน์โหลดและเล่นไปพร้อมๆ กันได้ ในตัวอย่างง่ายๆ นี้ ยังมีข้อควรทราบอยู่ 5 ข้อ ดังนี้

  1. เราโหลดตัวโหลด API โดยใช้แท็ก script
  2. เราสร้างองค์ประกอบ div ชื่อ "viewerCanvas" เพื่อคงผู้ชมไว้
  3. เราเขียนฟังก์ชัน JavaScript เพื่อสร้างออบเจ็กต์ "ผู้ดู"
  4. เราโหลดหนังสือโดยใช้ตัวระบุที่ไม่ซ้ํากัน (ในกรณีนี้คือ ISBN:0738531367)
  5. เราใช้ google.books.setOnLoadCallback เพื่อเรียก initialize เมื่อ API โหลดเต็มแล้ว

โดยจะอธิบายขั้นตอนเหล่านี้ด้านล่าง

การโหลด Audience API ที่ฝังไว้

การใช้เฟรมเวิร์กตัวโหลด API เพื่อโหลด Embedded Reader API นั้นค่อนข้างง่าย ซึ่งเกี่ยวข้องกับ 2 ขั้นตอนต่อไปนี้

  1. รวมไลบรารีตัวโหลด API:
    <script type="text/javascript" src="https://www.google.com/books/jsapi.js"></script>
    
  2. เรียกใช้เมธอด google.books.load เมธอด google.books.load จะใช้พารามิเตอร์รายการที่ไม่บังคับซึ่งระบุฟังก์ชันเรียกกลับหรือภาษาตามที่อธิบายไว้ด้านล่าง
    <script type="text/javascript">
      google.books.load();
    </script>
    

การโหลด Embedded Audience API เวอร์ชันแปล

Embedded Audience API ใช้ภาษาอังกฤษโดยค่าเริ่มต้นเมื่อแสดงข้อมูลที่เป็นข้อความ เช่น เคล็ดลับเครื่องมือ ชื่อการควบคุม และข้อความลิงก์ หากคุณต้องการเปลี่ยน API ผู้ดูแบบฝังเพื่อแสดงข้อมูลอย่างเหมาะสมในภาษาหนึ่งๆ คุณเพิ่มพารามิเตอร์ language ที่ไม่บังคับลงในการเรียก google.books.load ได้

ตัวอย่างเช่น หากต้องการแสดงโมดูลหน้าตัวอย่างหนังสือในภาษาโปรตุเกสแบบบราซิล ให้ทําดังนี้

<script type="text/javascript">
  google.books.load({"language": "pt-BR"});
</script>

ดูตัวอย่าง (book-language.html)

รหัสภาษา RFC 3066 ที่รองรับในปัจจุบัน ได้แก่ af, ar, hy, bg, ca, zh-CN, zh-TW, hr, cs, da, nl, en, fil, fi, fr, de, el,he, hu, is, id, it, ja, ko, lves lt, lt, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s s, s s, s s, s s, s s, s s, และวิธีเล่น, Play

เมื่อใช้ API ผู้ดูแบบฝังในภาษาอื่นที่ไม่ใช่ภาษาอังกฤษ เราขอแนะนําอย่างยิ่งว่าคุณควรแสดงหน้าเว็บด้วยส่วนหัว content-type ที่ตั้งค่าเป็น utf-8 หรือใส่แท็ก <meta> ที่เทียบเท่าในหน้าเว็บ การทําเช่นนี้จะช่วยให้ระบบแสดงผลอักขระอย่างถูกต้องในทุกเบราว์เซอร์ ดูข้อมูลเพิ่มเติมได้ที่หน้าของ 36 ของพารามิเตอร์ชุดอักขระ HTTP ของ W3C

องค์ประกอบ DOM ของผู้ชม

<div id="viewerCanvas" style="width: 600px; height: 500px"></div>

หากต้องการให้หนังสือแสดงในหน้าเว็บ หน้าหนึ่งต้องจองที่ไว้ ซึ่งโดยปกติจะทําได้โดยการสร้างองค์ประกอบ div ที่มีชื่อ และรับข้อมูลการอ้างอิงถึงองค์ประกอบนี้ในรูปแบบออบเจ็กต์เอกสาร (DOM) ของเบราว์เซอร์

ตัวอย่างข้างต้นระบุ div ชื่อ "viewerCanvas" และกําหนดขนาดโดยใช้แอตทริบิวต์รูปแบบ ผู้ชมจะใช้ขนาดของคอนเทนเนอร์โดยปริยาย

ออบเจ็กต์ DefaultViewer

var viewer = new google.books.DefaultViewer(document.getElementById('viewerCanvas'));

คลาส JavaScript ที่สร้างและควบคุมผู้ดูรายเดียวในหน้าเว็บคือคลาส DefaultViewer (คุณสร้างอินสแตนซ์ของคลาสได้มากกว่า 1 รายการ - ออบเจ็กต์แต่ละรายการจะกําหนดผู้ดูแยกต่างหากในหน้าเว็บ) อินสแตนซ์ใหม่ของคลาสนี้สร้างขึ้นโดยใช้โอเปอเรเตอร์ new ของ JavaScript

เมื่อสร้างอินสแตนซ์ผู้ชมใหม่ คุณจะต้องระบุโหนด DOM ในหน้าเว็บ (มักจะเป็นองค์ประกอบ div) เป็นคอนเทนเนอร์สําหรับผู้ชม โหนด HTML เป็นออบเจ็กต์ย่อยของออบเจ็กต์ JavaScript document และเราได้รับการอ้างอิงถึงองค์ประกอบนี้ผ่านเมธอด document.getElementById()

โค้ดนี้จะกําหนดตัวแปร (ชื่อ viewer) และกําหนดตัวแปรนั้นให้กับออบเจ็กต์ DefaultViewer ใหม่ ฟังก์ชัน DefaultViewer() เรียกว่าเครื่องมือสร้าง และคําจํากัดความ (รวบรวมเพื่อความชัดเจนจาก การอ้างอิง API ผู้ดูที่ฝัง) จะแสดงที่ด้านล่าง

ผู้ผลิต คำอธิบาย
DefaultViewer(คอนเทนเนอร์, เลือกใช้) สร้างผู้ดูใหม่ภายใน HTML ที่กําหนด container ซึ่งควรเป็น องค์ประกอบระดับบล็อก ในหน้าเว็บ (โดยปกติจะเป็น DIV) ตัวเลือกขั้นสูงจะส่งผ่านพารามิเตอร์ opts ที่ไม่บังคับ

โปรดทราบว่าพารามิเตอร์ที่ 2 ในเครื่องมือสร้างเป็นข้อมูลที่ไม่บังคับ ซึ่งมีไว้สําหรับการใช้งานขั้นสูงที่ไม่อยู่ในขอบเขตของเอกสารนี้ และไม่แสดงในตัวอย่าง "สวัสดีทั่วโลก"

การเริ่มต้นหนังสือด้วยหนังสือบางเรื่อง

  viewer.load('ISBN:0738531367');

เมื่อเราสร้างผู้ดูผ่านทางเครื่องมือสร้าง DefaultViewer แล้ว จะต้องเริ่มต้นจากหนังสือเล่มใดเล่มหนึ่ง การเริ่มต้นนี้ทําได้โดยใช้เมธอด load() ของผู้ดู เมธอด load() ต้องใช้ค่า identifier ซึ่งจะบอก API ว่าจะแสดงหนังสือใด ระบบจะส่งวิธีนี้ก่อนที่จะมีการดําเนินการอื่นๆ ในออบเจ็กต์ผู้มีสิทธิ์อ่าน

หากคุณทราบตัวระบุหลายตัวสําหรับหนังสือ ไม่ว่าจะเป็น ISBN สําหรับฉบับปกอ่อนหรือหมายเลข OCLC อื่น คุณสามารถส่งอาร์เรย์ของสตริงตัวระบุเป็นพารามิเตอร์แรกไปยังฟังก์ชัน load() ได้ ผู้ชมจะแสดงหนังสือหากมีการแสดงตัวอย่างเนื้อหาที่ฝังได้ซึ่งเชื่อมโยงกับตัวระบุใดๆ ในอาร์เรย์

ตัวระบุหนังสือที่รองรับ

Embedded Audience API รองรับค่าหลายค่าเพื่อระบุหนังสือบางเล่ม เช่นเดียวกับฟีเจอร์ลิงก์แบบไดนามิก ซึ่งได้แก่

ISBN
เลขมาตรฐานสากลประจําหนังสือ 10 หรือ 13 หลักที่ไม่ซ้ําใคร
เช่น ISBN:0738531367
หมายเลข OCLC
หมายเลขเฉพาะที่ OCLC กําหนดให้กับหนังสือเมื่อมีการเพิ่มระเบียนหนังสือลงในระบบแคตตาล็อกของ WorldCat
ตัวอย่างเช่น OCLC:70850767
LCCN
หมายเลขมาตรฐานสําหรับหนังสือของหอสมุดรัฐสภาอเมริกันที่กําหนดให้กับบันทึกของหอสมุดรัฐสภาอเมริกัน
ตัวอย่าง: LCCN:2006921508
รหัสระดับเสียงของ Google Books
สตริงที่ไม่ซ้ํากันซึ่ง Google Books กําหนดให้กับหนังสือ ซึ่งจะปรากฏใน URL ของหนังสือใน Google Books
ตัวอย่างเช่น Py8u3Obs4f4C
URL ตัวอย่างของ Google Books
URL ที่เปิดหน้าตัวอย่างของหนังสือใน Google Books
ตัวอย่าง https://books.google.com/books?id=Py8u3Obs4f4C&printsec=frontcover

ตัวระบุเหล่านี้มักใช้กับ API อื่นๆ ในกลุ่ม Google Books API ตัวอย่างเช่น คุณสามารถใช้ลิงก์แบบไดนามิกเพื่อแสดงผลปุ่มแสดงตัวอย่างเฉพาะในกรณีที่หนังสือฝังได้ จากนั้นเมื่อผู้ใช้คลิกปุ่ม ให้ยกตัวอย่างผู้ชมโดยใช้ URL การแสดงตัวอย่างที่แสดงโดยการเรียกลิงก์แบบไดนามิก ในทํานองเดียวกัน คุณสามารถสร้างแอปพลิเคชันการเรียกดูและแสดงตัวอย่างที่สมบูรณ์ด้วย Books API ซึ่งจะแสดงตัวระบุอุตสาหกรรมที่เหมาะสมหลายรายการในฟีดปริมาณ ไปที่หน้าตัวอย่างเพื่อดูการใช้งานขั้นสูงบางอย่าง

การจัดการกับการเริ่มต้นที่ไม่สําเร็จ

ในบางกรณี การโทรของ load อาจล้มเหลว กรณีนี้มักเกิดขึ้นเมื่อ API ไม่พบหนังสือที่เกี่ยวข้องกับตัวระบุที่ระบุ เมื่อไม่มีหน้าตัวอย่างของหนังสือ ฝังการแสดงตัวอย่างหนังสือไม่ได้ หรือเมื่อมีข้อจํากัดทางเขตแดนให้ผู้ใช้ปลายทางไม่เห็นหนังสือเล่มนั้น คุณควรได้รับการแจ้งเตือนเกี่ยวกับความล้มเหลวดังกล่าวเพื่อให้โค้ดจัดการเงื่อนไขนี้ได้อย่างสวยงาม ด้วยเหตุนี้ ฟังก์ชัน load ช่วยให้คุณส่งพารามิเตอร์ที่ 2 (ไม่บังคับ) notFoundCallback ได้ ซึ่งจะระบุว่าควรเรียกใช้ฟังก์ชันใดหากโหลดหนังสือไม่ได้ ตัวอย่างเช่น โค้ดต่อไปนี้จะสร้างช่อง "alert" ของ JavaScript หากหนังสือสามารถฝังได้

function alertNotFound() {
  alert("could not embed the book!");
}

function initialize() {
  var viewer = new google.books.DefaultViewer(document.getElementById('viewerCanvas'));
  viewer.load('ISBN:1234', alertNotFound);
}

ดูตัวอย่าง (book-notfound.html)

เมื่อใช้การเรียกกลับนี้ คุณอาจตัดสินใจที่จะแสดงข้อผิดพลาดที่คล้ายกันนี้ หรือคุณเลือกที่จะซ่อนองค์ประกอบ viewerCanvas โดยสิ้นเชิง พารามิเตอร์เรียกกลับไม่สําเร็จเป็นตัวเลือกที่ไม่บังคับและจะไม่รวมอยู่ในตัวอย่าง "Hello World"

หมายเหตุ: เนื่องจากตัวอย่างอาจใช้ไม่ได้กับหนังสือบางเล่มและสําหรับผู้ใช้ทุกคน การที่ผู้ชมดูตัวอย่างได้ก่อนจะพยายามโหลดผู้ดูหนังสือก็อาจเป็นประโยชน์ เช่น คุณอาจต้องการแสดงปุ่ม "หน้าตัวอย่างของ Google" หน้า หรือส่วนใน UI เฉพาะเมื่อผู้ใช้ดูตัวอย่างได้จริง ซึ่งทําได้โดยใช้ Books API หรือลิงก์แบบไดนามิก ซึ่งทั้งคู่จะรายงานว่าหนังสือจะพร้อมให้ฝังโดยใช้ผู้ดูหรือไม่

การจัดการการเริ่มต้นที่ประสบความสําเร็จ

การทราบว่าหนังสือโหลดสําเร็จเมื่อใดและอาจเป็นประโยชน์ ด้วยเหตุนี้ ฟังก์ชัน load จึงจะรองรับพารามิเตอร์ที่ 3 ที่ไม่บังคับ ซึ่งก็คือ successCallback ซึ่งระบบจะเรียกใช้เมื่อหนังสือโหลดเสร็จแล้ว

function alertInitialized() {
  alert("book successfully loaded and initialized!");
}

function initialize() {
  var viewer = new google.books.DefaultViewer(document.getElementById('viewerCanvas'));
  viewer.load('ISBN:0738531367', null, alertInitialized);
}

ดูตัวอย่าง (book-success.html)

โค้ดเรียกกลับนี้จะมีประโยชน์ในกรณีที่คุณต้องการแสดงองค์ประกอบบางอย่างในหน้าเว็บในกรณีที่ผู้ชมแสดงผลอย่างสมบูรณ์เท่านั้น

การแสดงผู้ชมขณะโหลด

  google.books.setOnLoadCallback(initialize);

ขณะที่แสดงหน้า HTML โมเดลออบเจ็กต์เอกสาร (DOM) จะสร้างขึ้น รวมถึงรูปภาพและสคริปต์ภายนอกจะได้รับและรวมอยู่ในออบเจ็กต์ document ระบบจะใช้ฟังก์ชัน google.books.setOnLoadCallback เพื่อเลื่อนการดําเนินการของฟังก์ชันที่สร้างออบเจ็กต์ DefaultViewer เพื่อให้แน่ใจว่าผู้ชมวางในหน้าเว็บหลังจากโหลดหน้าเว็บเสร็จสมบูรณ์แล้วเท่านั้น เนื่องจาก setOnLoadCallback จะเรียก initialize เมื่อ API ผู้ดูที่ฝังไว้โหลดอยู่และพร้อมใช้งานเท่านั้น เพื่อหลีกเลี่ยงพฤติกรรมที่คาดเดาไม่ได้ และรับประกันลักษณะวิธีการและเวลาที่ระบบดึงผู้ชม

หมายเหตุ: เราขอแนะนําอย่างยิ่งให้คุณตั้งเวลาการโหลดผู้ชมโดยใช้ฟังก์ชัน google.books.setOnLoadCallback แทนการใช้เหตุการณ์ onLoad ในแท็ก <body> เพื่อเพิ่มความเข้ากันได้แบบข้ามเบราว์เซอร์

การโต้ตอบกับผู้ชม

เมื่อคุณมีออบเจ็กต์ DefaultViewer แล้ว คุณจะโต้ตอบกับออบเจ็กต์นั้นได้ ออบเจ็กต์ผู้ดูพื้นฐานมีลักษณะและพฤติกรรมคล้ายกับผู้ดูที่คุณโต้ตอบบนเว็บไซต์ Google Books และมีพฤติกรรมในตัวมากมาย

แต่คุณโต้ตอบกับผู้ชมแบบเป็นโปรแกรมได้ด้วย ออบเจ็กต์ DefaultViewer รองรับวิธีต่างๆ ที่ปรับเปลี่ยนสถานะการแสดงตัวอย่างโดยตรง เช่น เมธอด zoomIn(), nextPage() และ highlight() จะทํางานบนโปรแกรมแบบเป็นโปรแกรม แทนที่จะเป็นการโต้ตอบของผู้ใช้

ตัวอย่างต่อไปนี้แสดงตัวอย่างหนังสือที่ "เปลี่ยน" ไปยังหน้าถัดไปโดยอัตโนมัติทุกๆ 3 วินาที หากหน้าถัดไปอยู่ในส่วนที่มองเห็นได้ของผู้ชม ผู้ชมจะเลื่อนไปยังหน้านั้นอย่างราบรื่น หากผู้ชมไม่แสดง ผู้ชมก็ข้ามไปยังส่วนบนสุดของหน้าถัดไปโดยตรง

function nextStep(viewer) {
  window.setTimeout(function() {
    viewer.nextPage();
    nextStep(viewer);
  }, 3000);
}

function initialize() {
  var viewer = new google.books.DefaultViewer(document.getElementById('viewerCanvas'));
  viewer.load('ISBN:0738531367');
  nextStep(viewer);
}

google.books.setOnLoadCallback(initialize);

ดูตัวอย่าง (book-animate.html)

โปรดทราบว่าการเรียกแบบเป็นโปรแกรมไปยังผู้ชมจะไม่สําเร็จหรือไม่มีผลจนกว่าผู้ดูจะเริ่มต้นหนังสือบางเล่มอย่างสมบูรณ์ โปรดใช้พารามิเตอร์ successCallback กับ viewer.load ตามที่อธิบายไว้ข้างต้น เพื่อเรียกเฉพาะฟังก์ชันดังกล่าวเมื่อผู้ชมพร้อมแล้ว

สําหรับข้อมูลเกี่ยวกับฟังก์ชันทั้งหมดที่ออบเจ็กต์ DefaultViewer รองรับ โปรดดูคู่มืออ้างอิง

บันทึกการจัดโปรแกรม

ก่อนที่จะเริ่มเจาะลึกไปยัง Embedded Reader API คุณควรคํานึงถึงข้อกังวลต่อไปนี้เพื่อให้แอปพลิเคชันทํางานอย่างราบรื่นในแพลตฟอร์มที่ต้องการ

ความเข้ากันได้กับเบราว์เซอร์

Embedded Audience API รองรับ Internet Explorer, Firefox และ Safari เวอร์ชันล่าสุด และมักจะใช้เบราว์เซอร์อื่นๆ ที่ใช้ Gecko และ WebKit เช่น Camino และ Google Chrome

บางครั้งแอปพลิเคชันที่แตกต่างกันก็ต้องการพฤติกรรมที่ต่างกันสําหรับผู้ใช้ที่มีเบราว์เซอร์ที่ใช้ร่วมกันไม่ได้ Embedded Audience API ไม่มีการทํางานอัตโนมัติเมื่อตรวจพบเบราว์เซอร์ที่ใช้ร่วมกันไม่ได้ ตัวอย่างส่วนใหญ่ในเอกสารนี้ไม่ได้ตรวจสอบความเข้ากันได้ของเบราว์เซอร์ และไม่ได้แสดงข้อความแสดงข้อผิดพลาดสําหรับเบราว์เซอร์รุ่นเก่า แอปพลิเคชันจริงอาจทําสิ่งต่างๆ ได้ง่ายขึ้นเมื่อใช้เบราว์เซอร์เวอร์ชันเก่าหรือที่เข้ากันไม่ได้ แต่จะไม่มีการตรวจสอบดังกล่าวเพื่อให้ตัวอย่างอ่านได้ง่ายขึ้น

แอปพลิเคชันที่ไม่ร้ายแรงมักจะหลีกเลี่ยงความไม่สอดคล้องกันระหว่างเบราว์เซอร์กับแพลตฟอร์ม เว็บไซต์ต่างๆ เช่น quirksmode.org เป็นแหล่งข้อมูลที่ดีสําหรับการแก้ปัญหาเฉพาะหน้า

โหมด XHTML และแปลกตา

เราขอแนะนําให้คุณใช้ XHTML ที่เป็นไปตามมาตรฐานในหน้าเว็บที่มีผู้ดู เมื่อเบราว์เซอร์เห็น XHTML DOCTYPE ที่ด้านบนสุดของหน้าเว็บ หน้าเว็บจะแสดงผลใน "โหมดการปฏิบัติตามข้อกําหนดมาตรฐาน" ซึ่งทําให้เลย์เอาต์และพฤติกรรมต่างๆ คาดเดาได้มากขึ้นในเบราว์เซอร์ต่างๆ หน้าที่ไม่มีคําจํากัดความนั้นอาจแสดงผลใน "โหมดแปลกๆ" ซึ่งอาจทําให้เกิดเลย์เอาต์ที่ไม่สอดคล้องกัน

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

หมายเหตุเกี่ยวกับตัวอย่าง Embedded Audience API

โปรดทราบว่าตัวอย่างส่วนใหญ่ในเอกสารประกอบนี้จะแสดงเฉพาะโค้ด JavaScript ที่เกี่ยวข้องเท่านั้น ไม่ใช่ไฟล์ HTML แบบเต็ม คุณจะวางโค้ด JavaScript ลงในไฟล์ HTML ของโครงกระดูกเอง หรือดาวน์โหลดไฟล์ HTML แบบเต็มของแต่ละตัวอย่างได้โดยคลิกลิงก์หลังจากตัวอย่าง

การแก้ปัญหา

หากโค้ดของคุณใช้ไม่ได้ ให้ตรวจสอบวิธีต่อไปนี้อาจช่วยแก้ปัญหาให้คุณได้