ระบบจะโหลดส่วนเสริมของ Classroom ภายใน iframe เพื่อให้ ผู้ใช้ปลายทางได้รับประสบการณ์การใช้งานที่ราบรื่นและสะดวก iframe มี 5 ประเภทที่แตกต่างกัน โปรดดูหน้า iframe ในไดเรกทอรีเส้นทางของผู้ใช้เพื่อดูภาพรวมของวัตถุประสงค์และลักษณะของ iframe แต่ละรายการ
หลักเกณฑ์ด้านความปลอดภัยของ iframe
นักพัฒนาแอปควรปฏิบัติตามแนวทางปฏิบัติแนะนำในอุตสาหกรรมเพื่อรักษาความปลอดภัยของ iframe อย่างไรก็ตาม คุณควรรวมการโต้ตอบ API บางอย่างไว้ใน โฟลว์ผู้ใช้เพื่อยืนยันว่าคุณมีข้อมูลเข้าสู่ระบบที่ถูกต้องและสามารถระบุ บทบาทของผู้ใช้ในหลักสูตรได้อย่างถูกต้อง
การกำหนดค่าแอปพลิเคชันเซิร์ฟเวอร์
เราขอแนะนำให้กำหนดค่าเซิร์ฟเวอร์ดังต่อไปนี้เพื่อปกป้อง iframe
- ต้องใช้ HTTPS เราขอแนะนำอย่างยิ่งให้ใช้ TLS 1.2 ขึ้นไปและเปิดใช้ HTTP Strict Transport Security (HSTS) ดูบทความที่เกี่ยวข้องนี้ใน MDN เกี่ยวกับ Strict Transport Security
- เปิดใช้นโยบายรักษาความปลอดภัยเนื้อหาแบบเข้มงวด (Strict CSP) ดูบทความ OWASP และบทความนโยบายรักษาความปลอดภัยเนื้อหา MDN ที่เกี่ยวข้อง
- เปิดใช้แอตทริบิวต์คุกกี้ที่ปลอดภัย ดูแอตทริบิวต์ HttpOnly และบทความเกี่ยวกับคุกกี้ใน MDN ที่เกี่ยวข้อง
พารามิเตอร์การค้นหา
Iframe จะส่งข้อมูลที่สำคัญไปยังส่วนเสริมเป็นพารามิเตอร์การค้นหา พารามิเตอร์มี 2 หมวดหมู่ ได้แก่ พารามิเตอร์ที่เกี่ยวข้องกับไฟล์แนบและพารามิเตอร์ที่เกี่ยวข้องกับการลงชื่อเข้าใช้
พารามิเตอร์ที่เกี่ยวข้องกับไฟล์แนบ
พารามิเตอร์ที่เกี่ยวข้องกับไฟล์แนบจะให้ข้อมูลเกี่ยวกับ หลักสูตร งาน ไฟล์แนบของส่วนเสริม งานที่นักเรียนส่ง และโทเค็นการให้สิทธิ์แก่ส่วนเสริม
- รหัสหลักสูตร
ค่า
courseId
คือตัวระบุหลักสูตรรวมอยู่ใน iframe ทั้งหมด
- รหัสสินค้า
ค่า
itemId
คือตัวระบุของAnnouncement
CourseWork
หรือCourseWorkMaterial
ที่แนบไฟล์นี้รวมอยู่ใน iframe ทั้งหมด
- ประเภทรายการ
itemType
value identifies the resource type on which this attachment is attached. ค่าสตริงที่ส่งคือค่าใดค่าหนึ่งใน"announcements"
,"courseWork"
หรือ"courseWorkMaterials"
รวมอยู่ใน iframe ทั้งหมด
- รหัสไฟล์แนบ
ค่า
attachmentId
คือตัวระบุไฟล์แนบรวมอยู่ใน iframe ของ
teacherViewUri
,studentViewUri
และstudentWorkReviewUri
- รหัสการส่ง
ค่า
submissionId
เป็นตัวระบุงานของนักเรียน/นักศึกษา แต่ควรใช้ร่วมกับattachmentId
เพื่อระบุงานของนักเรียน/นักศึกษาในงานที่กำหนดรวมอยู่ใน
studentWorkReviewUri
- โทเค็นส่วนเสริม
addOnToken
value คือโทเค็นการให้สิทธิ์ที่ใช้ในการเรียกaddOnAttachments.create
เพื่อสร้างส่วนเสริมรวมอยู่ใน iframe การค้นพบไฟล์แนบและ iframe การอัปเกรดลิงก์
- URL ที่จะอัปเกรด
การมีค่า
urlToUpgrade
หมายความว่าครูได้รวมไฟล์แนบลิงก์ไว้ในงานและตกลงที่จะอัปเกรดเป็นไฟล์แนบส่วนเสริม หากยังไม่ได้กำหนดค่าฟีเจอร์นี้ โปรดดูรายละเอียดเพิ่มเติมในคู่มือเกี่ยวกับการอัปเกรดลิงก์เพื่อเพิ่มไฟล์แนบรวมอยู่ใน iframe การอัปเกรดลิงก์
พารามิเตอร์ที่เกี่ยวข้องกับการลงชื่อเข้าใช้
login_hint
พารามิเตอร์การค้นหาจะให้ข้อมูลเกี่ยวกับ
ผู้ใช้ Classroom ที่เข้าชมหน้าเว็บของส่วนเสริม พารามิเตอร์การค้นหานี้
ระบุไว้ใน URL ของ iframe src
ระบบจะส่งเมื่อผู้ใช้เคยใช้ส่วนเสริมของคุณเพื่อช่วยลดอุปสรรคในการลงชื่อเข้าใช้ของผู้ใช้ปลายทาง คุณต้องจัดการพารามิเตอร์การค้นหานี้ในการติดตั้งใช้งานส่วนเสริม
- คำแนะนำในการเข้าสู่ระบบ
login_hint
เป็นตัวระบุที่ไม่ซ้ำกันสำหรับบัญชี Google ของผู้ใช้ หลังจากที่ผู้ใช้เข้าสู่ระบบส่วนเสริมเป็นครั้งแรก ระบบจะส่งพารามิเตอร์login_hint
ในการเข้าชมส่วนเสริมครั้งต่อๆ ไปของผู้ใช้รายเดียวกันlogin_hint
พารามิเตอร์มีประโยชน์ 2 ประการ ดังนี้- ส่งค่า
login_hint
ในระหว่างขั้นตอนการตรวจสอบสิทธิ์เพื่อให้ผู้ใช้ไม่ต้องป้อนข้อมูลเข้าสู่ระบบเมื่อกล่องโต้ตอบการลงชื่อเข้าใช้ปรากฏขึ้น ระบบจะไม่ลงชื่อเข้าใช้ผู้ใช้โดยอัตโนมัติ - หลังจากที่ผู้ใช้ลงชื่อเข้าใช้แล้ว ให้ใช้พารามิเตอร์นี้เพื่อเปรียบเทียบ ค่ากับผู้ใช้ที่คุณอาจลงชื่อเข้าใช้ส่วนเสริมอยู่แล้ว หากพบรายการที่ตรงกัน คุณสามารถปล่อยให้ผู้ใช้ลงชื่อเข้าใช้ต่อไปและหลีกเลี่ยงการแสดงโฟลว์การลงชื่อเข้าใช้ได้ หากพารามิเตอร์ไม่ตรงกับผู้ใช้ที่ลงชื่อเข้าใช้ รายใด ให้แจ้งให้ผู้ใช้ลงชื่อเข้าใช้ด้วยปุ่มลงชื่อเข้าใช้ที่มีการสร้างแบรนด์ของ Google
รวมอยู่ใน iframe ทั้งหมด
- ส่งค่า
iframe การค้นพบไฟล์แนบ
มิติข้อมูล | คำอธิบาย |
---|---|
ต้องระบุ | ใช่ |
URI | ระบุไว้ในข้อมูลเมตาของส่วนเสริม |
พารามิเตอร์การค้นหา | courseId , itemId , itemType ,
addOnToken และ login_hint |
ความสูง | ความสูงของหน้าต่าง 80% ลบด้วย 60 พิกเซลสำหรับส่วนหัวด้านบน |
ความกว้าง | สูงสุด 1600 พิกเซล ความกว้างของหน้าต่าง 90% เมื่อหน้าต่างมีความกว้างไม่เกิน 600 พิกเซล ความกว้างของหน้าต่าง 80% เมื่อหน้าต่างมีความกว้างมากกว่า 600 พิกเซล |
ตัวอย่างสถานการณ์การค้นพบไฟล์แนบ
- ส่วนเสริมของ Classroom จะได้รับการจดทะเบียนใน Google Workspace
Marketplace โดยมี URI การค้นพบไฟล์แนบเป็น
https://example.com/addon
- ครูติดตั้งส่วนเสริมนี้และสร้างประกาศ งาน หรือสื่อการเรียนการสอนใหม่ภายในหลักสูตรใดหลักสูตรหนึ่ง เช่น
itemId=234
,itemType=courseWork
และcourseId=123
- ขณะกำหนดค่ารายการดังกล่าว ครูจะเลือกส่วนเสริมที่เพิ่งติดตั้งเป็นไฟล์แนบ
- Classroom จะสร้าง iframe โดยตั้งค่า URL ของ src เป็น
https://example.com/addon?courseId=123&itemId=234&itemType=courseWork&addOnToken=456
- ครูทำงานภายใน iframe เพื่อเลือกไฟล์แนบ
- เมื่อเลือกไฟล์แนบ ส่วนเสริมจะส่ง
postMessage
ไปยัง Classroom เพื่อปิด iframe
iframe teacherViewUri และ studentViewUri
มิติข้อมูล | คำอธิบาย |
---|---|
ต้องระบุ | ใช่ |
URI | teacherViewUri หรือ studentViewUri |
พารามิเตอร์การค้นหา | courseId , itemId , itemType ,
attachmentId และ login_hint |
ความสูง | ความสูงของหน้าต่าง 100% ลบ 140 พิกเซลสำหรับส่วนหัวด้านบน |
ความกว้าง | ความกว้างของหน้าต่าง 100% |
iframe ของ studentWorkReviewUri
มิติข้อมูล | คำอธิบาย |
---|---|
ต้องระบุ | ไม่ใช่ (ระบุว่านี่คือไฟล์แนบประเภทกิจกรรมหรือไม่) |
URI | studentWorkReviewUri |
พารามิเตอร์การค้นหา | courseId , itemId , itemType ,
attachmentId , submissionId และ login_hint |
ความสูง | ความสูงของหน้าต่าง 100% ลบด้วย 168 พิกเซลสำหรับส่วนหัวด้านบน |
ความกว้าง | ความกว้างของหน้าต่าง 100% ลบด้วยความกว้างของแถบด้านข้าง<> แถบด้านข้างมีความกว้าง 312 พิกเซล เมื่อขยายและ 56 พิกเซลเมื่อยุบ |
ลิงก์ iframe การอัปเกรด
มิติข้อมูล | คำอธิบาย |
---|---|
ต้องระบุ | ได้ หากส่วนเสริมรองรับการอัปเกรดลิงก์เป็นไฟล์แนบของส่วนเสริม |
URI | ระบุไว้ในข้อมูลเมตาของส่วนเสริม |
พารามิเตอร์การค้นหา | courseId , itemId , itemType ,
addOnToken , urlToUpgrade และ login_hint |
ความสูง | ความสูงของหน้าต่าง 80% ลบด้วย 60 พิกเซลสำหรับส่วนหัวด้านบน |
ความกว้าง | สูงสุด 1600 พิกเซล ความกว้างของหน้าต่าง 90% เมื่อหน้าต่างมีความกว้างไม่เกิน 600 พิกเซล ความกว้างของหน้าต่าง 80% เมื่อหน้าต่างมีความกว้างมากกว่า 600 พิกเซล |
สถานการณ์ตัวอย่างการอัปเกรดลิงก์
- ส่วนเสริมของ Classroom จะได้รับการจดทะเบียนด้วย URI ของลิงก์อัปเกรดเป็น
https://example.com/upgrade
คุณได้ระบุรูปแบบโฮสต์และคำนำหน้าเส้นทางต่อไปนี้สำหรับไฟล์แนบลิงก์ที่ Classroom ควรพยายามอัปเกรดเป็นไฟล์แนบส่วนเสริม- โฮสต์คือ
example.com
และคำนำหน้าเส้นทางคือ/quiz
- โฮสต์คือ
- ครูสร้างประกาศ งาน หรือสื่อการเรียนการสอนใหม่ในหลักสูตรใดหลักสูตรหนึ่ง
เช่น
itemId=234
,itemType=courseWork
และcourseId=123
- ครูวางลิงก์
https://example.com/quiz/5678
ในกล่องโต้ตอบไฟล์แนบลิงก์ ที่ตรงกับรูปแบบ URL ที่คุณระบุ จากนั้นระบบจะแจ้งให้ครู อัปเกรดลิงก์เป็นไฟล์แนบของส่วนเสริม Classroom จะเปิดตัว iframe การอัปเกรดลิงก์โดยมี URL ตั้งค่าเป็น to
https://example.com/upgrade?courseId=123&itemId=234&itemType=courseWork&addOnToken=456&urlToUpgrade=https%3A%2F%2Fexample.com%2Fquiz%2F5678
คุณประเมินพารามิเตอร์การค้นหาที่ส่งผ่านใน iframe และเรียกใช้
CreateAddOnAttachment
ปลายทาง โปรดทราบว่าระบบจะเข้ารหัส URI ของพารามิเตอร์urlToUpgrade
query เมื่อส่งใน iframe คุณต้องถอดรหัสพารามิเตอร์ เพื่อให้ได้รูปแบบเดิม เช่น JavaScript มีฟังก์ชันdecodeURIComponent()
เมื่อสร้างไฟล์แนบส่วนเสริมจากลิงก์สำเร็จแล้ว คุณจะส่ง
postMessage
ไปยัง Classroom เพื่อปิด iframe
ปิด iframe
เครื่องมือการเรียนรู้อาจปิด iframe ได้โดยการส่ง postMessage
พร้อมกับเพย์โหลด {type: 'Classroom', action: 'closeIframe'}
Classroom ยอมรับเฉพาะ postMessage
จาก host_name+port
ที่สอดคล้องกับ URI เดิมที่เปิดอยู่
<button id="close">Send message to close iframe</button>
<script>
document.querySelector('#close')
.addEventListener('click', () => {
window.parent.postMessage({
type: 'Classroom',
action: 'closeIframe',
}, '*');
});
</script>
ปิด iframe จาก iframe
โดเมน + พอร์ตของหน้าที่ส่งเหตุการณ์ postMessage
ต้องมีโดเมน + พอร์ตเดียวกันกับ URI ที่ใช้เปิด iframe ไม่เช่นนั้นระบบจะเพิกเฉยต่อข้อความ
วิธีแก้ปัญหาชั่วคราวคือการเปลี่ยนเส้นทางกลับไปยังหน้าในโดเมนเดิม
ซึ่งไม่มีอะไรมากไปกว่าการส่งเหตุการณ์ postMessage
ปิด iframe จากแท็บใหม่
การป้องกันแบบข้ามโดเมนจะป้องกันไม่ให้การดำเนินการนี้ทำงาน วิธีแก้ปัญหาคือจัดการการสื่อสารระหว่าง iframe กับแท็บใหม่ด้วยตนเอง และให้ iframe เป็นผู้รับผิดชอบในการออกเหตุการณ์ปิด postMessage
ในท้ายที่สุด หมายเหตุ: เราจะนำไฮเปอร์ลิงก์ "เปิดใน [ชื่อพาร์ทเนอร์]" ออก เพื่อไม่ให้ผู้ใช้สร้างแท็บด้วยวิธีนี้ในอนาคตอันใกล้นี้
ข้อจำกัด
ระบบจะเปิด iframe ทั้งหมดด้วยแอตทริบิวต์แซนด์บ็อกซ์ต่อไปนี้
allow-popups
allow-popups-to-escape-sandbox
allow-forms
allow-scripts
allow-storage-access-by-user-activation
allow-same-origin
และนโยบายเกี่ยวกับฟีเจอร์ต่อไปนี้
allow="microphone *"
การบล็อกคุกกี้ของบุคคลที่สาม
โปรดทราบว่าการบล็อกคุกกี้ของบุคคลที่สามทำให้การรักษาเซสชันที่ลงชื่อเข้าใช้ใน iframe เป็นเรื่องยาก ดูข้อมูลเกี่ยวกับสถานะปัจจุบันของการบล็อกคุกกี้ในเบราว์เซอร์ต่างๆ ได้ที่ https://www.cookiestatus.com แน่นอนว่าปัญหานี้ไม่ได้เกิดขึ้นกับส่วนเสริมของ Google Classroom เท่านั้น แต่ยังส่งผลต่อเว็บไซต์ทั้งหมดที่ใช้ iframe ของบุคคลที่สามด้วย พาร์ทเนอร์ของเราหลายรายเคยพบปัญหานี้แล้ว
วิธีแก้ปัญหาเบื้องต้นมีดังนี้
- เปิดแท็บใหม่เพื่อสร้างคุกกี้ในบริบทของบุคคลที่หนึ่ง เบราว์เซอร์บางประเภท อนุญาตให้เข้าถึงคุกกี้ที่สร้างขึ้นในบริบทของบุคคลที่หนึ่งขณะอยู่ในบริบทของบุคคลที่สาม
- ขอให้ผู้ใช้อนุญาตคุกกี้ของบุคคลที่สาม แต่การดำเนินการนี้อาจไม่สามารถทำได้เสมอไป กับผู้ใช้บางราย
- ออกแบบเว็บแอปพลิเคชันแบบหน้าเดียวที่ไม่ต้องใช้คุกกี้
คาดว่าเบราว์เซอร์เวอร์ชันต่อๆ ไปจะมีข้อจำกัดเกี่ยวกับคุกกี้เพิ่มเติม สร้างคำขอฟีเจอร์เพื่อ ส่งความคิดเห็นให้ Google เกี่ยวกับวิธีลดการเพิ่มที่พาร์ทเนอร์ต้องการ
เปิดใช้การค้นพบส่วนเสริมโดยใช้นิพจน์ทั่วไปของ URL
ครูมักจะสร้างงานที่มีไฟล์แนบเป็นลิงก์ หากต้องการโปรโมตการใช้ ส่วนเสริม คุณสามารถระบุนิพจน์ทั่วไปที่ตรงกับ URL ของทรัพยากร ที่เข้าถึงได้ในส่วนเสริม ครูที่แนบลิงก์ที่ตรงกับนิพจน์ทั่วไปรายการใดรายการหนึ่งจะเห็นกล่องโต้ตอบที่ปิดได้ซึ่งกระตุ้นให้ลองใช้ส่วนเสริมของคุณ ผู้ใช้จะเห็นกล่องโต้ตอบก็ต่อเมื่อมีการติดตั้งส่วนเสริมสำหรับบัญชีของตนแล้ว
หากต้องการให้ครูมีพฤติกรรมนี้ โปรดระบุนิพจน์ทั่วไปที่เหมาะสมให้แก่ผู้ติดต่อของ Google หากนิพจน์ทั่วไป ที่คุณระบุมีความกว้างมากเกินไปหรือขัดแย้งกับส่วนเสริมอื่น เราอาจ แก้ไขให้มีความจำกัดมากขึ้นหรือแตกต่างออกไป
รูปที่ 1 ครูเลือกไฟล์แนบลิงก์
ในงานใหม่
รูปที่ 2 ครูวางลิงก์จากแหล่งที่มาของบุคคลที่สาม
ครูได้ติดตั้งส่วนเสริม Classroom ของบุคคลที่สามแล้ว
รูปที่ 3 กล่องโต้ตอบแบบอินเทอร์แอกทีฟที่แสดง
ต่อครูเมื่อลิงก์ที่วางตรงกับนิพจน์ทั่วไปที่นักพัฒนาซอฟต์แวร์บุคคลที่สามระบุ
หากครูเลือก "ลองเลย" ในป๊อปอัปตามที่เห็นในรูปที่ 3 ระบบจะเปลี่ยนเส้นทางครูไปยัง iframe การค้นพบไฟล์แนบของส่วนเสริม