AIR Implementation of Functionality
From Blognone
AIR Implementation of Functionality
ความสามารถด้าน HTML และ JavaScript ของ AIR นั้นเทียบเท่ากับโครงการและเว็บเบราว์เซอร์อื่นๆ ที่ใช้ WebKit ทุกประการ (เช่น Safari) คุณสามารถใช้เอกสารของ Safari ในการหาข้อมูลเกี่ยวกับความสามารถด้าน AIR ของ AIR ได้ทันที อย่างไรก็ตาม เนื่องจากว่าตัวแสดงผล HTML นั้นอยู่ในรันไทม์ ซึ่งไม่ใช่เบราว์เซอร์ มันจึงมีจุดแตกต่างด้าน HTML และ JavaScript กับ AIR อยู่บ้าง
Contents |
คุกกี้
AIR สนับสนุนการใช้งานคุกกี้สำหรับเนื้อหาแบบ HTML อย่างเต็มที่ โดยใช้วิธีเรียกจากความสามารถด้านเครือข่ายของระบบปฏิบัติการอีกชั้นหนึ่ง นั่นแปลว่า AIR สามารถใช้คุกกี้ร่วมกับเว็บเบราว์เซอร์หรือแอพพลิเคชันตั่วอื่นๆ ที่ใช้งานความสามารถของระบบปฏิบัติการได้
ตัวอย่างคือ แอพพลิเคชัน AIR สามารถใช้คุกกี้ของ Internet Explorer บนวินโดวส์และ Safari บนแมค ซึ่งทั้งสองโปรแกรมใช้ความสามารถในการเก็บคุกกี้ของระบบปฏิบัติการนั้นๆ ส่วน Firefox ซึ่งใช้วิธีเก็บคุกกี้ของตัวเองนั้นยังไม่สามารถใช้กับแอพพลิเคชันของ AIR ได้
Tip: นอกจากคุกกี้แล้ว AIR ยังมีวิธีอื่นๆ ในการเก็บข้อมูลถาวรของแอพพลิเคชัน เช่น API สำหรับไฟล์ หรือฐานข้อมูลภายในตัว เป็นต้น
การจัดการหน้าต่าง
หน้าต่างปกติ (windows)
คุณสามารถสร้างหน้าต่างใหม่ด้วย JavaScript เช่นเดียวกับที่คุณทำได้ในเบราว์เซอร์
myWindow = window.open("Window.html", "myWindow", "height=400,width=400");
อย่างไรก็ตาม คุณสมบัติของรันไทม์ซึ่งอนุญาตให้เข้าถึง API ของ AIR และ Flash Player นั้นไม่ได้เกิดขึ้นอัตโนมัติหลังจากสร้างหน้าต่างใหม่ คุณต้องระบุคุณสมบัตินี้อย่างชัดเจน ตามตัวอย่าง
window.runtime = window.opener.runtime;
TIP: รุ่นเบต้ายังไม่สนับสนุนหน้าต่างแบบ native โดยตอนนี้ยังมีเฉพาะ API สำหรับ JavaScript เท่านั้น
ไดอะล็อก (dialog)
AIR สนับสนุนไดอะล็อกของ HTML อย่างไรก็ตามยังไม่มีฟีเจอร์นี้ในเวอร์ชันเบต้า
| ชนิดของไดอะล็อก | สถานะในเวอร์ชันเบต้า |
|---|---|
| alert | สนับสนุน |
| confirm | สนับสนุน |
| prompt | ไม่สนับสนุน |
ไดอะล็อกเปิดไฟล์ที่สร้างจากคำสั่ง
<input type="file" />
นั้นยังไม่สนับสนุนในเวอร์ชันเบต้าเช่นกัน
ไดอะล็อกที่ไม่มีในเวอร์ชันเบต้า จะสนับสนุนในเวอร์ชัน 1.0
XmlHttpRequest และ Ajax
AIR สนับสนุนออปเจคต์แบบ XmlHttpRequest ซึ่งช่วยให้คุณสามารถรับส่งข้อมูลแบบ Ajax ได้
ข้อดีของการพัฒนาแอพพลิเคชันแบบ Ajax ใน AIR เมื่อเทียบกับเว็บเบราว์เซอร์คือ คุณสามารถมีรันไทม์ที่ทำงานข้ามแพลตฟอร์มได้ โดยไม่ต้องห่วงว่าการทำงานข้ามแพลตฟอร์มและข้ามเบราว์เซอร์จะมีปัญหาในการพัฒนา
นั่นแปลว่าคุณเขียนโค้ดเพียงครั้งเดียวและใช้ได้บนทุกแพลตฟอร์ม
นี่เป็นตัวอย่างโค้ดแอพพลิเคชันที่ใช้ XmlHttpRequest ซึ่งทำงานได้โดยไม่ขึ้นกับระบบปฏิบัติการ
<script type="text/javascript">
var xmlhttp;
function appLoad( )
{
//replace with URL to resource being loaded
var url = "http://www.mikechambers.com/blog/";
xmlhttp = new XMLHttpRequest( );
xmlhttp.open("GET", url,true);
xmlhttp.onreadystatechange=function( ){
if (xmlhttp.readyState==4)
{
runtime.trace(xmlhttp.responseText);
}
}
xmlhttp.send(null)
}
</script>
เมื่อฟังก์ชันนี้ถูกเรียก มันจะใช้ออปเจคต์ XmlHttpRequest ในการโหลดข้อมูลจาก URL ที่ระบุ และแสดงเนื้อหาออกมาทางคอมมานด์ไลน์ จุดสำคัญของตัวอย่างนี้คือการที่เรารู้ว่าจะรันบนรันไทม์ AIR ซึ่งทำงานเหมือนกันบนระบบปฏิบัติการที่ต่างกัน ดังนั้นเราจึงไม่ต้องเขียนโค้ดตรวจสอบวิธีการ XmlHttpRequest เหมือนที่เคยทำในเบราว์เซอร์
AIR สนับสนุน XmlHttpRequest ทั้งแบบ synchronous และ asynchronous รวมไปถึงการเรียกข้อมูลข้ามโดเมน
รูปแบบ URI
การทำงานของ Universal Resource Identifiers (URIs) ใน AIR นั้นโดยมากไม่ต่างอะไรกับ URI ในเว็บเบราว์เซอร์ ในส่วนนี้เราจะอธิบายรูปแบบของ URI ที่ใช้กับ HTML ในแอพพลิเคชัน AIR และรูปแบบ URI แบบใหม่ๆ ที่เพิ่มเข้ามาในรันไทม์
รูปแบบ URI ที่สนับสนุน
AIR สนับสนุนรูปแบบ URI มาตรฐานที่พบได้ทั่วไปในเว็บเบราว์เซอร์ ดังตาราง
| รูปแบบ URI | คำอธิบาย |
|---|---|
| http:// | URI ซึ่งชี้ไปยังเนื้อหาผ่านทางโปรโตคอล HTTP มาตรฐาน สนับสนุนเต็มที่ใน AIR |
| https:// | URI ซึ่งชี้ไปยังเนื้อหาผ่านทางโปรโตคอลที่เข้ารหัสด้วย SSL/TLS สนับสนุนเต็มที่ใน AIR |
| file:// | URI ซึ่งชี้ไปยังระบบไฟล์ภายในเครื่องหรือผ่านเครือข่าย |
| ftp:// | URI ซึ่งชี้ไปยังเนื้อหาผ่านทางโปรโตคอล FTP ใน AIR Beta นั้นถ้าเรียกไฟล์จะทำงานได้ปกติ แต่ถ้าเรียกไดเรคทอรีจะได้หน้าว่างที่ไม่แสดงรายการเนื้อหาในไดเรคทอรี |
รูปแบบ URI ที่ไม่สนับสนุน
ใน AIR เวอร์ชันเบต้า จะยังไม่สนับสนุนรูปแบบ URI บางชนิดที่เจอบ่อยๆ เช่น mailto:// และ feed://
ในช่วงเวลาที่เขียนหนังสือเล่มนี้ ทาง Adobe ยังไม่ตัดสินใจว่าจะมีรูปแบบ URI พวกนี้ในเวอร์ชัน 1.0 หรือไม่
รูปแบบ URI เฉพาะของ AIR
Adobe AIR ได้เพิ่มรูปแบบ URI แบบพิเศษ เพื่อใช้อ้างอิงไฟล์และข้อมูลในระบบของผู้ใช้ ดังตาราง
| รูปแบบ URI | คำอธิบาย |
|---|---|
| app-resource:/ | อ้างอิงไปยังตำแหน่งไดเรคทอรี root ของแอพพลิเคชัน มักใช้อ้างอิงเนื้อหาภายในไฟล์ AIR |
| app-storage:/ | อ้างอิงไปยังตำแหน่งพื้นที่เก็บข้อมูลของแอพพลิเคชัน บนระบบของผู้ใช้ มักใช้อ้างอิงการตั้งค่าและข้อมูลของผู้ใช้สำหรับแอพพลิเคชันนั้น |
นี่เป็นตัวอย่างการเรียกใช้ app-resource
app-resource:/foo/test.html
ตัวอย่างนี้เรียกไฟล์ชื่อ test.html ซึ่งอยู่ในไดเรคทอรี foo ในตำแหน่งที่ติดตั้งแอพพลิเคชัน
Tip: URI ของ AIR นั้นใช้เครื่องหมาย / เพียงตัวเดียว ต่างจาก URI แบบอื่นที่ใช้สองตัว
รูปแบบ URI เฉพาะนี้สามารถใช้ได้ทุกที่ เช่นเดียวกับ URI แบบปกติอื่นๆ ใน HTML และ JavaScript
URL แบบสัมพัทธ์
คุณไม่จำเป็นต้องใช้ URL แบบเต็มทุกครั้งใน AIR โดยคุณสามารถใช้ URL แบบสัมพัทธ์ (relative) ได้ เพียงแต่คุณต้องระวังว่า URL แบบสัมพัทธ์นี้ใช้อ้างอิงภายในตัวแอพพลิเคชันเท่านั้น (ไม่ใช่ชี้ไปยังเซิร์ฟเวอร์ เหมือนกับเว็บแอพพลิเคชันทั่วไป)
URL แบบสัมพัทธ์นั้นจะอ้างถึงตำแหน่ง root ของแอพพลิเคชันเท่านั้น โดยจะใช้ URI แบบ app-resource:/
ตัวอย่าง:
<img src="foo/image.png" />
จะชี้ไปยัง:
<img src="app-resource:/foo/image.png" />
คุณต้องระวังเสมอในการย้ายเนื้อหาจากเว็บมายัง AIR
ความปลอดภัย
เนื้อหาส่วนนี้จะพูดถึงวิธีการสร้างระบบรักษาความปลอดภัยของ AIR โดยเทียบกับเว็บเบราว์เซอร์
Security Context
เนื้อหาที่ถูกติดตั้งลงในเครื่องพร้อมแอพพลิเคชัน จะทำงานภายใต้สภาวะแวดล้อมด้านความปลอดภัยแบบเดียวกับแอพพลิเคชัน นั่นแปลว่ามันสามารถเข้าถึง API ของ AIR ได้ทั้งหมด
ส่วนเนื้อหาที่อยู่บนเซิร์ฟเวอร์และถูกโหลดมานั้น จะทำงานใต้ความปลอดภัยแบบเว็บ และไม่สามารถเข้าถึง API ของ AIR ได้ รวมถึงไม่สามารถร้องขอสิทธิ์เพิ่มเติมแบบเดียวกับที่เนื้อหาภายในแอพพลิเคชันทำได้
ตัวอย่างเช่น เนื้อหาที่อยู่ในแอพพลิเคชันโดยเรียกจาก:
app-resource:/foo.html
จะสามารถเข้าถึง API ของ AIR ได้ แต่เนื้อหาผ่าน HTTP ซึ่งอยู่ที่:
http://www.yourdomain.com/foo.html
จะอยู่ภายใต้ความปลอดภัยแบบเว็บ ซึ่งไม่สามารถใช้ API ของ AIR
เนื้อหาซึ่งอยู่ในไดเรคทอรีที่ติดตั้งแอพพลิเคชันจะใช้ระบบความปลอดภัยของแอพพลิเคชัน แต่เนื้อหาซึ่งอยู่ในไดเรคทอรีเก็บข้อมูล (app-storage:/) จะใช้ความปลอดภัยแบบเว็บ (ตาราง 3-3)
| เนื้อหาที่เรียกจาก | สิทธิ์เข้าถึง AIR API |
|---|---|
| app-resource:/foo.html | มี |
| app-storage:/foo.html | ไม่มี |
| http://www.anydomain.com/foo.html | ไม่มี |
| https://www.anydomain.com/foo.html | ไม่มี |
| file:/C:/foo.html | ไม่มี |
| ftp://www.anydomain.com/foo.html | ไม่มี |
ดังนั้นเนื้อหาที่ดาวน์โหลดจากแหล่งที่มาและโดเมนอื่นๆ ควรเก็บไว้ที่ app-storage:/ ไม่ใช่ app-resource:/ เพื่อป้องกันไม่ให้เกิดช่องว่างทางด้านความปลอดภัย
การเรียกข้อมูลข้ามโดเมน
AIR ไม่จำกัดการเรียกข้อมูลข้ามโดเมน (cross domain data loading) สำหรับเนื้อหาในแอพพลิเคชัน และอนุญาตให้เรียกข้อมูลโดยใช้วิธี XMLHttpRequest
การจำกัดการเรียกข้อมูลข้ามโดเมนจะถูกใช้สำหรับเนื้อหาเว็บที่ถูกจำกัดสิทธิ์
การใช้งานเฟรมเวิร์ค JavaScript
HTML ภายใน AIR นั้นสนับสนุน JavaScript อย่างเต้มที่ คุณสามารถใช้เฟรมเวิร์ค JavaScript ใดๆ ก็ได้ในการพัฒนาแอพพลิเคชัน อย่างไรก็ตามมีสิ่งที่ควรสนใจในการใช้งานเฟรมเวิร์คดังนี้
- เฟรมเวิร์คควรถูกรวมไว้ในไฟล์ AIR เพื่อการันตีว่าจะเรียกใช้ได้ในขณะที่ผู้ใช้ออฟไลน์
- ถ้าเฟรมเวิร์คจะต้องเรียกใช้ข้อมูลจากเซิร์ฟเวอร์กลางแห่งใดแห่งหนึ่ง คุณควรทดสอบก่อนว่า URL แบบสัมพัทธ์ทำงานได้ถูกต้อง
- ถึงแม้ว่า AIR จะสามารถโหลดเฟรมเวิร์คมาใช้งานผ่านอินเทอร์เน็ตขณะรันได้ แต่ก็อาจทำให้แอพพลิเคชันเริ่มต้นได้ช้าลง รวมถึงเสียความสามารถในการทำงานขณะออฟไลน์ด้วย
คุณสามารถหาตัวอย่างแอพพลิเคชัน AIR ที่ใช้เฟรมเวิร์คจาวาสคริปต์ EXT JS ได้จากเว็บไซต์ของ AIR:
http://www.adobe.com/go/airwiki
Tip: คุณสามารถหาข้อมูลเพิ่มเติมของเฟรมเวิร์ค EXT JS ได้จาก http://extjs.com