ฉันได้รับข้อผิดพลาดด้านล่างเมื่อฉันพยายามตั้งค่าแฮชเป็น URL หลักจาก iframe ซึ่งมี URL ของโดเมนอื่น:
JavaScript ที่ไม่ปลอดภัยพยายามเข้าถึงเฟรมด้วย URL "URL1" จากเฟรมที่มี URL "URL2" โดเมนโปรโตคอลและพอร์ตต้องตรงกัน
ฉันจะแก้ไขปัญหานี้ได้อย่างไร?
ฉันได้รับข้อผิดพลาดด้านล่างเมื่อฉันพยายามตั้งค่าแฮชเป็น URL หลักจาก iframe ซึ่งมี URL ของโดเมนอื่น:
JavaScript ที่ไม่ปลอดภัยพยายามเข้าถึงเฟรมด้วย URL "URL1" จากเฟรมที่มี URL "URL2" โดเมนโปรโตคอลและพอร์ตต้องตรงกัน
ฉันจะแก้ไขปัญหานี้ได้อย่างไร?
คำตอบ:
จากเอกสารลูกที่มีต้นกำเนิดต่างกันคุณไม่ได้รับอนุญาตให้เข้าถึงlocation.hash
คุณสมบัติของหน้าต่างด้านบนแต่คุณได้รับอนุญาตให้ตั้งค่าlocation
คุณสมบัตินั้นเอง
ซึ่งหมายความว่าเนื่องจากตำแหน่งหน้าต่างด้านบนเป็นhttp://example.com/page/
แทนที่จะทำ
parent.location.hash = "#foobar";
คุณจำเป็นต้องรู้ตำแหน่งของผู้ปกครองและทำ
parent.location = "http://example.com/page/#foobar";
เนื่องจากทรัพยากรไม่ได้รับการสำรวจสิ่งนี้จะทำงานได้ตามที่คาดไว้จึงเปลี่ยนเฉพาะส่วนแฮชของ url เท่านั้น
หากคุณใช้สิ่งนี้เพื่อการสื่อสารข้ามโดเมนฉันขอแนะนำให้ใช้easyXDMแทน
Crossframe-Scripting ไม่สามารถทำได้เมื่อทั้งสองเฟรมมีโดเมนต่างกัน -> Security
ดูสิ่งนี้: http://javascript.about.com/od/reference/a/frame3.htm
ตอนนี้เพื่อตอบคำถามของคุณ: ไม่มีวิธีแก้ปัญหาหรือวิธีแก้ไขคุณควรตรวจสอบการออกแบบเว็บไซต์ของคุณว่าเหตุใดจึงต้องมีสองเฟรมจากโดเมนที่ต่างกันซึ่งเปลี่ยน url ของอีกโดเมนหนึ่ง
ฉันได้รับข้อความแสดงข้อผิดพลาดเดียวกันเมื่อฉันพยายามลบโดเมนสำหรับ iframe.src
สำหรับฉันคำตอบคือการเปลี่ยน iframe.src เป็น url บนโดเมน SAME แต่จริงๆแล้วเป็นหน้าเปลี่ยนเส้นทาง html ไปยังโดเมนที่ต้องการ จากนั้นโดเมนอื่นก็ปรากฏใน iframe ของฉันโดยไม่มีข้อผิดพลาดใด ๆ
ทำงานอย่างมีเสน่ห์ :)
วิธีแก้ปัญหาคือการใช้ไฟล์โลคัลซึ่งดึงเนื้อหาระยะไกล
remoteInclude.php
<?php
$url = $_GET['url'];
$contents = file_get_contents($url);
echo $contents;
HTML
<iframe frameborder="1" id="frametest" src="/remoteInclude.php?url=REMOTE_URL_HERE"></iframe>
<script>
$("#frametest").load(function (){
var contents =$("#frametest").contents();
});
ฉันพบว่าการใช้ปุ่มไลค์ Facebook เวอร์ชัน XFBML แทนเวอร์ชัน HTML5 ช่วยแก้ปัญหานี้ได้ เพิ่มรหัสด้านล่างที่คุณต้องการให้ปุ่มปรากฏ:
<div id="fb-root"></div>
<script>(function (d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
<fb:like send="true" layout="button_count" width="50" show_faces="false" font="arial"></fb:like>
จากนั้นเพิ่มสิ่งนี้ลงในแท็ก HTML ของคุณ:
xmlns:fb="http://ogp.me/ns/fb#"
ปัญหาคือแม้ว่าคุณจะสร้างพร็อกซีหรือโหลดเนื้อหาและฉีดเข้าไปราวกับว่ามันอยู่ในเครื่องสคริปต์ใด ๆ ที่เนื้อหานั้นกำหนดจะถูกโหลดจากโดเมนอื่นและทำให้เกิดปัญหาข้ามโดเมน