หาก Javascript ได้รับอนุญาตให้เข้าถึงสคริปต์จากโดเมนเดียวกันเว็บไซต์จะสร้างข้อมูลผสมที่ต้องอ่านและแก้ไขเนื้อหาจากโดเมนอื่นได้อย่างไร
หาก Javascript ได้รับอนุญาตให้เข้าถึงสคริปต์จากโดเมนเดียวกันเว็บไซต์จะสร้างข้อมูลผสมที่ต้องอ่านและแก้ไขเนื้อหาจากโดเมนอื่นได้อย่างไร
คำตอบ:
หาก API ที่คุณพยายามเข้าถึงรองรับJSONPคุณจะต้องระบุชื่อฟังก์ชั่นจาวาสคริปต์ในคำขอของคุณจากนั้น JSONP จะส่งคืนจาวาสคริปต์myfunc({the:data});
ที่คุณสามารถใช้งานได้เหมือนจาวาสคริปต์ปกติซึ่งเป็นเหตุผลที่คุณจะสร้าง<script src="www.website.com/somecall?jsonp=myfunc">
แท็กใหม่"ส่งคำขอ" (jQuery ทำสิ่งนี้โดยอัตโนมัติหากคุณใช้type: jsonp
ใน$.ajax
คำขอ)
ข้อเสียคือต้องการผู้ให้บริการของ API เพื่อสนับสนุน JSONP
Flash สามารถเข้าถึงเนื้อหาข้ามโดเมนได้ตราบใดที่เว็บไซต์เป้าหมายมีcrossdomain.xml
ไฟล์ที่รูทซึ่งระบุว่าอนุญาตให้ทำได้ซึ่งโดยปกติจะเป็นกรณีบนเซิร์ฟเวอร์ที่ให้บริการ API)
ข้อเสียคือต้องใช้ Flash ในเบราว์เซอร์ของผู้ใช้และเว็บไซต์ที่คุณได้รับข้อมูลจะต้องมี crossdomain.xml ที่อนุญาตการร้องขอข้ามโดเมน
ภาษาฝั่งเซิร์ฟเวอร์เช่น PHP ไม่มีข้อ จำกัด โดเมน BS เดียวกันดังนั้นคุณสามารถมีสคริปต์ที่ทำหน้าที่เป็นพร็อกซี (เช่นดาวน์โหลดผ่านหนึ่งในส่วนขยาย http เช่น cURL)
สิทธิประโยชน์เพิ่มเติมคือคุณสามารถล้างข้อมูล (หรือแม้กระทั่งผสมหลายแหล่งที่มา) บนเซิร์ฟเวอร์ก่อนที่จะส่งต่อไปยังหน้าเว็บ / จาวาสคริปต์ของคุณดังนั้นคุณสามารถแยกเฉพาะส่วนที่มีประโยชน์ของข้อมูลซึ่งเป็นสิ่งที่ดีเมื่อทำเว็บมือถือ แบนด์วิธอาจมีปัญหา
ข้อเสียคือคำขอทั้งหมดต้องผ่านเซิร์ฟเวอร์ของคุณเพื่อเพิ่มภาระให้กับเซิร์ฟเวอร์ของคุณ
อย่างไรก็ตามข้อดีคือมันจะทำงานร่วมกับ ressource ใด ๆ เนื่องจากไม่ต้องการเป้าหมายเพื่อสนับสนุน crossdomain หรือ jsonp ดังนั้นหากไม่มีสิ่งใดทำงานได้
Internet Explorer มีคำขอข้ามโดเมน
Firefox 3.5+ มีมาตรฐานการแบ่งปันข้ามจุดกำเนิดแต่ต้องการแหล่งข้อมูลที่คุณพยายามเข้าถึงเพื่อรวมส่วนหัวพิเศษเช่นใน PHP:
header("content-type: Access-Control-Allow-Origin: *");
header("content-type: Access-Control-Allow-Methods: GET");
เบราว์เซอร์หลักอื่น ๆ บางตัวรองรับสิ่งนี้เช่นกันดังนั้นหากคุณไม่จำเป็นต้องสนับสนุนเบราว์เซอร์เก่าและหากคุณสามารถรับ ressources ที่คุณพยายามเข้าถึงเพื่อส่งส่วนหัวเหล่านี้นี่อาจเป็นทางออกที่ดีที่สุดของคุณมิฉะนั้นฝั่งเซิร์ฟเวอร์ สคริปต์จะเป็นคำแนะนำของฉัน
Firefox มีการตั้งค่าผู้ใช้capability.policy.default.XMLHttpRequest.open
แต่ฉันจะไม่นับการเปลี่ยนการตั้งค่าในเบราว์เซอร์ของผู้ใช้
คุณสามารถใช้ API (ของโดเมนอื่น) ได้ Javascript ของคุณจะเรียกไฟล์ PHP (หรือไฟล์สคริปต์อื่น ๆ ) ที่อยู่บนเว็บเซิร์ฟเวอร์ของคุณ (โดเมนของคุณ) ซึ่งจะเรียก API (ของโดเมนอื่นที่ใช้ CURL) และรับการตอบกลับจากคุณ