ข้อกำหนด:
โดเมน A มีหน้า a.html ซึ่งมี iframe ที่มีหน้า b.html ของโดเมน B ตอนนี้เราต้องส่งค่าของกล่องข้อความบนหน้า a.html ไปยัง b.html ผ่านปุ่มบน a.html กล่องข้อความของเพจ
หมายเหตุ: b.html นี่คือหน้าเว็บ html และไม่สามารถรับค่าที่โพสต์จากเว็บไซต์อื่นได้ ดังนั้น คุณจะไม่สามารถใช้วิธีโพสต์โดยตรงเพื่อส่งผ่านค่าได้ อย่างไรก็ตาม หากหน้ารับเป็น b.aspx หรือ b.asp คุณ ไม่สามารถโพสต์โดยตรงได้แล้ว? คำตอบคือใช่ เป็นไปได้จริง แต่ต้องรีเฟรช b.asp หรือ b.aspx เราจะเปลี่ยนองค์ประกอบหรือค่าของหน้ารับแบบไดนามิกโดยไม่ต้องรีเฟรชได้อย่างไร (โครงการท้องถิ่นของ IE สามารถเข้าถึงข้ามโดเมนได้ แต่การเข้าถึงข้ามโดเมนจากเครือข่ายภายนอกจะถูกปฏิเสธโดยค่าเริ่มต้น โครงการท้องถิ่นของ FireFox และการเข้าถึงข้ามโดเมนจากเครือข่ายภายนอกถูกปฏิเสธ)
หลักการ:
เบราว์เซอร์ห้ามการเข้าถึงข้ามโดเมน การเข้าถึงข้อมูล แต่เบราว์เซอร์ไม่ได้ห้ามการถ่ายโอนค่าโพสต์ข้ามโดเมนและข้ามเฟรม เราสามารถโพสต์ในโดเมน A ไปที่เฟรมของเพจในโดเมน B จากนั้นใช้เฟรมเพจของโดเมน B เพื่อให้สามารถเข้าถึงข้อมูลในโดเมนนี้ได้ นี่เป็นเคล็ดลับเล็กๆ น้อยๆ ในแอปพลิเคชัน HTML และสามารถส่งข้อมูลข้ามโดเมนได้โดยไม่ต้องใช้ความรู้ขั้นสูงอื่นๆ
วิธีการ:
เพิ่มสองเพจในโดเมน B เพื่อให้เข้าถึงข้อมูลข้ามโดเมน ได้แก่ post.aspx และ main.aspx
ความสัมพันธ์ของหน้าเป็นดังนี้ a.html ในโดเมน A มีเฟรม ที่อยู่หน้าเฟรมคือ main.aspx ในโดเมน B main.aspx เป็นเฟรมเซ็ตที่ประกอบด้วยสองเฟรม (frmMain)b.html และ (frmPost)โพสต์ .aspx .
a.html ของโดเมน A:
<format action=" http://www.b**.com/post.aspx " method="post" target="frmPost">
<input id="cmd" type=" text" size="20">
<input type="submit">
</form>
<iframe src=" http://www.b**.com/main.aspx"></iframe >
หลัก ของโดเมน B .aspx:
<frameset rows="*,0" frameborder="no" border="0" framespacing="0">
<frame src="b.html" name="frmMain">
<frame src= "post.aspx" name="frmPost">
</frameset>
ขั้นแรกเราจะบันทึกข้อมูลที่จะส่งผ่านไปยังโดเมน B ในรูปแบบ a.html จากนั้นโพสต์ไปที่ post.aspx ในโดเมน B
ในเวลานี้ post.aspx จะได้รับค่า จากนั้นจึงดำเนินการเฟรมหลักในโดเมนนี้ เพื่อเข้าถึง b.html
string cmd = Request.Form["cmd"];
if (null != cmd && string.Empty != cmd)
{
Response.Write("<script language="JavaScript" for="window" เหตุการณ์= "onload"> if (parent && parent.frames["frmMain"]) {Add theExecution code to control b.html here} </script> ");
}
ไม่ใช่เรื่องยากที่จะพบว่าการกระโดดข้าม มีการใช้เฟรมที่นี่ (นั่นคือ เลเยอร์ของเฟรมถูกข้ามไปตรงกลาง) เพื่อให้สามารถเข้าถึงข้อมูลข้ามโดเมนได้ นั่นคือโพสต์ไปที่เฟรมย่อยของเฟรม
Postscript:
ตัวอย่างนี้เป็นเพียงวิธีแก้ปัญหาสำหรับการเข้าถึงข้ามโดเมนภายใต้สถานการณ์พิเศษบางอย่าง ซึ่งอาจเป็นประโยชน์กับคุณ เนื่องจากวิธีการนี้ง่าย การใช้งานจึงมีข้อจำกัดมากมาย (อย่างไรก็ตาม ฉันคิดว่าสิ่งนี้คล้ายกับ ajax มาก หน้านี้ไม่ได้รับการรีเฟรชและการประมวลผลข้อมูลฝั่งเซิร์ฟเวอร์ก็เสร็จสมบูรณ์^o^)
เนื้อหาข้อความบนเว็บที่เกี่ยวข้อง:
โซลูชันการเข้าถึงข้ามโดเมนสำหรับเว็บแอปพลิเคชัน
เพื่อนที่เคยพัฒนา Ajax ในหลายเว็บไซต์จะรู้ว่าหากอยู่ในเว็บไซต์ A เราต้องการใช้ Ajax เพื่อรับเนื้อหาเฉพาะในเว็บไซต์ B หากเป็นเว็บไซต์ A และเว็บไซต์ B ไม่ได้อยู่ในโดเมนเดียวกัน จึงเกิดปัญหาการเข้าถึงข้ามโดเมน ปัญหาการเข้าถึงข้ามโดเมนของ Ajax เป็นปัญหาทั่วไปที่นักพัฒนา Ajax ในปัจจุบันพบ
IE จัดการการเข้าถึงข้ามโดเมนโดยเปิดกล่องคำเตือนเพื่อเตือนผู้ใช้ หากผู้ใช้รวมเว็บไซต์เป็นเว็บไซต์ที่เชื่อถือได้หรือลดระดับความปลอดภัย IE จะไม่เตือนคุณถึงปัญหานี้
เมื่อ FireFox และเบราว์เซอร์อื่นๆ ที่ไม่ใช่ของ Microsoft พบการเข้าถึงข้ามโดเมน วิธีแก้ไขคือการปฏิเสธการเข้าถึง
บางคนบอกว่า IE เป็นเบราว์เซอร์กระแสหลัก ตราบใดที่ยังสามารถใช้งานได้ตามปกติ นี่เป็นคำสั่งที่ไม่ดี แม้ว่า IE จะสามารถจัดการได้ แต่ก็มีข้อกำหนดเบื้องต้นว่าผู้ใช้ประสบปัญหาในการคลิกใช่หลังจากกล่องคำเตือนปรากฏขึ้นบนเพจ (การคลิก No จะไม่ดำเนินการเรียก Ajax) หรือผู้ใช้รวม เว็บไซต์เป็นเว็บไซต์ที่เชื่อถือได้ แนวทางทั้งสองนี้ค่อนข้างพบได้ทั่วไปในแอปพลิเคชันระบบการจัดการองค์กร เนื่องจากผู้ดูแลระบบสามารถใช้วิธีการจัดการเพื่อให้แน่ใจว่าพฤติกรรมของผู้ใช้ แต่สำหรับการพัฒนาเว็บไซต์หรือพอร์ทัลบนอินเทอร์เน็ต วิธีการนี้ใช้ไม่ได้ผล
ฉันพบปัญหานี้เมื่อเร็วๆ นี้ ฉันจำเป็นต้องทำให้เอฟเฟกต์พิเศษบางอย่างปรากฏบนหน้าต่างหลักหลังจากการเข้าถึงข้ามโดเมน ฉันค้นหาข้อมูลบางอย่างและพบวิธีแก้ปัญหาที่เป็นไปได้หลายประการผ่านการพยายามอย่างต่อเนื่องและการทดสอบความเข้ากันได้ในเบราว์เซอร์ที่แตกต่างกัน:
1. วิธีการใช้เว็บพรอกซี . นั่นคือ คำขอเข้าถึงข้ามโดเมนไปยังเว็บไซต์ B ที่สร้างขึ้นเมื่อผู้ใช้เยี่ยมชมเว็บไซต์ A จะถูกส่งไปยังหน้าที่กำหนดของเว็บไซต์ A และหน้าดังกล่าวจะทำการโต้ตอบแทนหน้าผู้ใช้ ดังนั้นจึงให้ผลลัพธ์ที่เหมาะสม โซลูชันนี้สามารถแก้ปัญหาการเข้าถึงข้ามโดเมนส่วนใหญ่ที่สามารถคิดได้ในขั้นตอนนี้ แต่ต้องมีเว็บไซต์ A เพื่อให้การสนับสนุนเว็บพรอกซี ดังนั้น เว็บไซต์ A และเว็บไซต์ B จะต้องร่วมมืออย่างใกล้ชิด และแต่ละกระบวนการโต้ตอบคือเซิร์ฟเวอร์ ของเว็บไซต์ A ภาระเพิ่มขึ้น และไม่สามารถบันทึกสถานะเซสชันในนามของผู้ใช้ได้
2. วิธีการตามความต้องการ พอร์ทัลของ MYMSN ใช้วิธีนี้ แต่ MYMSN ไม่เกี่ยวข้องกับปัญหาการเข้าถึงข้ามโดเมน ควบคุมการสร้างแท็กสคริปต์แบบไดนามิก และดำเนินการเรียกไปยังเพจข้ามโดเมนโดยการแก้ไขแอตทริบิวต์ src ของแท็กสคริปต์ ข้อบกพร่องในโซลูชันนี้คือแอตทริบิวต์ src ของสคริปต์ใช้เมธอด get เพื่อดำเนินการโทรให้เสร็จสิ้น หากสตริงที่ส่งผ่านในระหว่างการร้องขอมีขนาดใหญ่เกินไป สตริงอาจทำงานไม่ถูกต้อง อย่างไรก็ตาม โซลูชันนี้เหมาะสมมากสำหรับพอร์ทัลการรวม
3. วิธีการ iframe ฉันตรวจสอบโพสต์เกี่ยวกับการเข้าถึงข้ามโดเมนโดย Wakeup on javaeye เขาบอกว่าเขาได้แก้ไขปัญหาการเข้าถึงข้ามโดเมนโดยใช้ iframe เป็นไปได้ที่จะใช้ iframe สำหรับการส่งและรับข้อมูล แต่เนื่องจากหน้าต่างหลักและหน้าต่างลูกไม่สามารถโต้ตอบได้ (ในกรณีของการเข้าถึงข้ามโดเมน การโต้ตอบนี้จะถูกปฏิเสธ) ผลกระทบต่อหน้าต่างหลักจึงไม่สามารถทำให้เสร็จสมบูรณ์ได้
(ฉันพบบทความนี้ โปรดเพิ่มที่อยู่: http://www.javaeye.com/topic/15641 )
4. วิธีการดัมพ์ภายในเครื่องของผู้ใช้: IE เองนั้นอาศัยลักษณะของแพลตฟอร์ม windows เพื่อให้เราใช้ iframe วิธีแก้ปัญหาของการใช้หน่วยความจำเพื่อ "บายพาส" คือข้อมูลสามารถส่งระหว่างสองหน้าต่างผ่านคลิปบอร์ดของ windows บนไคลเอนต์ คุณจะต้องตั้งค่า Interval ที่ด้านข้างเพื่อรับข้อมูลสำหรับการโพล และล้าง Interval หลังจากได้รับ ผลลัพธ์. . ความเป็นอิสระของแพลตฟอร์ม FF กำหนดว่าไม่รองรับวิธีคลิปบอร์ด และช่องโหว่ของปลั๊กอินใน FF เวอร์ชันก่อนหน้าได้รับการแก้ไขแล้ว ดังนั้น FF จึงไม่สามารถทำการข้ามความลับผ่านหน่วยความจำได้ เนื่องจาก FF ไม่รองรับการทำงานของไฟล์ (การถ่ายโอนข้อมูลข้ามโดเมนไม่สามารถทำได้ผ่านคุกกี้) วิธีการทางเทคนิคนี้จึงสามารถใช้ได้ใน IE เท่านั้น
5. วิธีการของฉันเองในการแก้ปัญหาประเภทนี้: ผสมผสานวิธีการก่อนหน้านี้เข้าด้วยกัน เมื่อเยี่ยมชมเว็บไซต์ A ก่อนอื่นให้ขอให้เว็บไซต์ B ประมวลผลข้อมูลให้เสร็จสิ้น จากนั้นจึงรับผลลัพธ์ที่ต้องการตามข้อมูลระบุตัวตนที่ส่งคืน ข้อบกพร่องของวิธีนี้ก็ชัดเจนเช่นกัน ภาระของเว็บไซต์ B เพิ่มขึ้น ข้อดีคือเซสชันจะยังคงอยู่ และความสามารถในการโต้ตอบระหว่างหน้าของเว็บไซต์ A และเว็บไซต์ B ได้รับการปรับปรุง สิ่งสำคัญที่สุดคือโซลูชันนี้ตอบโจทย์ทุกความต้องการของฉัน
โดยสรุป ในบรรดาตัวเลือกข้างต้น ฉันแนะนำวิธีตามความต้องการมากที่สุด วิธีนี้สามารถแก้ไขปัญหาส่วนใหญ่ของคุณได้โดยไม่ต้องส่งข้อมูลจำนวนมาก
ที่อยู่โซลูชันการเข้าถึงข้ามโดเมนสำหรับแอปพลิเคชันเว็บ: http://www.newbooks.com.cn/info/37166.html
http://www.cnblogs.com/lgamoy/archive/2006/11/23/569633.html