วิธีการบังคับลิงก์จาก iframe ให้เปิดในหน้าต่างหลัก


359

ฉันต้องเปิดลิงก์ในหน้าหลักเดียวกันแทนที่จะเปิดในหน้าใหม่

หมายเหตุ: iframeหน้าพ่อแม่ที่มีโดเมนเดียวกัน


คำตอบ:


617

ฉันพบทางออกที่ดีที่สุดคือการใช้แท็กฐาน เพิ่มสิ่งต่อไปนี้ในส่วนหัวของหน้าใน iframe:

<base target="_parent">

การดำเนินการนี้จะโหลดลิงก์ทั้งหมดบนหน้าในหน้าต่างหลัก หากคุณต้องการให้ลิงค์โหลดในหน้าต่างใหม่ให้ใช้:

<base target="_blank">

แท็กนี้ได้รับการสนับสนุนอย่างสมบูรณ์ในเบราว์เซอร์ทั้งหมด


4
ค่าโดยสารข้ามเบราว์เซอร์นี้เป็นอย่างไร
Charlie Schliesser

3
@ Wilf ฉันไม่ถูกต้องนัก:;) <base target>ควรมาก่อน<a href>เพราะตั้งค่าบริบทการสืบค้นเริ่มต้นสำหรับลิงก์ต่อไปนี้ <base href>ควรมาก่อนการอ้างอิง URL ( <* href> <* src> <form action> <object data>…) ใด ๆเนื่องจากจะตั้งค่า URL หลักที่จะแก้ไข URL ที่เกี่ยวข้อง
sam

5
ทำไมคุณตอบคำถามนี้หนึ่งปีหลังจากที่ฉันตอบด้วยคำตอบเดียวกัน แต่คุณถูกเลือก มันแปลกมาก
vsync

5
ฉันคิดว่าเป็นเพราะคำตอบของคุณเปิดลิงก์ในหน้าต่างใหม่ในขณะที่ของฉันเปิดไว้ในหน้าต่างหลักของ iframe ซึ่งเป็นคำถามเดิม ขออภัยที่จะขโมยฟ้าร้องของคุณ!
Chris Vasselli

1
โปรดทราบว่า<baseแท็กไม่มีการปิดตามข้อกำหนดw3.org/TR/html5/document-metadata#the-base-elementดังนั้นจึงควรเป็น<base target="_parent" >
Mark Schultheiss

147

ใช้ target-attribute:

<a target="_parent" href="http://url.org">link</a>

1
ฉันพยายามที่นี้มีการเปิดในหน้าต่างใหม่
ฮาอิม Evgi

3
+1 จากฉัน base target = "_ parent" ทำงานได้ แต่ target = "_ parent" ไม่เคยล้มเหลวสำหรับฉัน!

7
<base target="_blank">ก็โอเค แต่คำถามที่นี่เกี่ยวกับลิงค์เดียวไม่ใช่เกี่ยวกับการเปลี่ยนพฤติกรรมของลิงก์ทั้งหมดใน iframe สำหรับฉันนี่คือคำตอบที่ถูกต้อง
kriskodzi


28

คุณสามารถใช้ตัวเลือกใด ๆ

ในกรณีที่เป็นเพจระดับบนเท่านั้น:

หากคุณต้องการเปิดลิงก์ทั้งหมดในหน้าหลักหรือ iframe พาเรนต์คุณต้องใช้รหัสต่อไปนี้ในส่วนหัวของ iframe:

<base target="_parent" />

หรือ

หากคุณต้องการเปิดลิงก์เฉพาะในเพจระดับบนหรือพาเรนต์ iframe ให้ใช้วิธีต่อไปนี้:

<a target="_parent" href="http://specific.org">specific Link</a>
<a  href="http://normal.org">Normal Link</a>

หรือ

ในกรณีที่ iframe ซ้อนกัน:

หากต้องการเปิดลิงก์ทั้งหมดเข้าไปในหน้าต่างเบราว์เซอร์ (เปลี่ยนเส้นทางใน URL ของเบราว์เซอร์) จากนั้นคุณใช้รหัสต่อไปนี้ในส่วนหัวของ iframe:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script type="text/javascript">
    $(window).load(function(){
        $("a").click(function(){
            top.window.location.href=$(this).attr("href");
            return true;
        })
    })
</script>

หรือ

หากคุณต้องการเปิดลิงก์เฉพาะในหน้าต่างเบราว์เซอร์ (เปลี่ยนเส้นทางใน URL เบราว์เซอร์) จากนั้นคุณใช้วิธีต่อไปนี้:

<a  href="http://specific.org"   target="_top" >specific Link</a>

หรือ

<a  href="javascript:top.window.location.href='your_link'">specific Link</a>
<a  href="javascript:top.window.location.href='http://specific.org'">specific Link</a>
<a  href="http://normal.org">Normal Link</a>

1
คำตอบที่ดีฉันต้องการเพียงแค่ใช้สิ่งนี้เพื่อการเชื่อมโยงเฉพาะ แต่คำตอบที่ได้รับการยอมรับเท่านั้นอธิบายถึงวิธีการเปลี่ยนเป้าหมายสำหรับการเชื่อมโยงทั้งหมดในหน้า ขอบคุณ
dading84

15

มีองค์ประกอบ HTML ที่เรียกว่าbaseซึ่งช่วยให้คุณ:

ระบุ URL เริ่มต้นและเป้าหมายเริ่มต้นสำหรับลิงก์ทั้งหมดในหน้า:

<base target="_blank" />

ด้วยการระบุว่า_blankคุณแน่ใจว่าลิงก์ทั้งหมดภายในiframeจะถูกเปิดออก


สิ่งนี้ได้รับการสืบทอดใน iframe ที่ซ้อนกันหรือไม่
beppe9000

7

ตามที่ระบุไว้คุณสามารถใช้แอตทริบิวต์ target แต่เลิกใช้เทคนิคใน XHTML นั่นทำให้คุณใช้จาวาสคริปต์ซึ่งมักจะเป็นเช่นparent.window.locationนั้น


10
targetแอตทริบิวต์จะไม่เลิก
Paul D. Waite

@ PaulD รอลิงค์ที่คุณโพสต์ตอนนี้ 404
Dan Loewenherz

1
@Dan: aha ใช่ขอบคุณ ลิงก์สด: dev.w3.org/html5/spec/…
Paul D. Waite

7

ลองtarget="_parent" แอตทริบิวต์anchor tagภายใน


ฉันพยายามที่นี้มีการเปิดในหน้าต่างใหม่
ฮาอิม Evgi

4
ลองใช้ target = "_ top" iframe อาจมี iframe ซ้อนกันอยู่ใช่ไหม หรือเปิดลิงก์จริงโดย javascript ในเหตุการณ์ onclick
Gee

5

หากคุณใช้ iframe ในหน้าเว็บของคุณคุณอาจประสบปัญหาในขณะที่เปลี่ยนทั้งหน้าผ่านทางไฮเปอร์ลิงก์ HTML (แท็กจุดยึด) จาก iframe มีสองวิธีในการลดปัญหานี้

การแก้ไข 1. คุณสามารถใช้แอตทริบิวต์ target ของ anchor tag ตามที่กำหนดในตัวอย่างต่อไปนี้

<a target="_parent" href="http://www.kriblog.com">link</a>

โซลูชันที่ 2 คุณยังสามารถเปิดหน้าใหม่ในหน้าต่างหลักจาก iframe ด้วย JavaScript

<a href="#" onclick="window.parent.location.href='http://www.kriblog.com';">

จำ⇒ target="_parent"เลิกใช้แล้วใน XHTML แต่ก็ยังรองรับใน HTML 5.x

สามารถอ่านเพิ่มเติมได้จากลิงค์ต่อไปนี้ http://www.kriblog.com/html/link-of-iframe-open-in-the-parent-window.html


4

โซลูชันที่หลากหลายและหลากหลายที่สุดของเบราว์เซอร์คือหลีกเลี่ยงการใช้แท็ก "ฐาน" และใช้แอตทริบิวต์เป้าหมายของแท็ก "a" แทน:

<a target="_parent" href="http://www.stackoverflow.com">Stack Overflow</a>

<base>แท็กน้อยหลากหลายและเบราว์เซอร์จะไม่สอดคล้องกันในความต้องการของพวกเขาสำหรับตำแหน่งภายในเอกสารที่ต้องทดสอบเบราว์เซอร์อื่น ๆ ขึ้นอยู่กับโครงการและสถานการณ์ของคุณอาจเป็นเรื่องยากหรือไม่สามารถทำได้โดยสิ้นเชิงเพื่อให้ได้การจัดวาง<base>แท็กข้ามเบราว์เซอร์ในอุดมคติ

การทำสิ่งนี้ด้วยtarget="_parent"คุณสมบัติของ<a>แท็กไม่เพียง แต่เป็นมิตรกับเบราว์เซอร์เท่านั้น แต่ยังช่วยให้คุณสามารถแยกแยะความแตกต่างระหว่างลิงก์ที่คุณต้องการเปิดใน iframe และสิ่งที่คุณต้องการเปิดในพาเรนต์


3

<a target="parent">จะเปิดลิงก์ในแท็บ / หน้าต่างใหม่ ... <a target="_parent">จะเปิดลิงก์ในหน้าต่างหลัก / ปัจจุบันโดยไม่ต้องเปิดแท็บ / หน้าต่างใหม่ Don't_forget_that_underscore!


2

ฉันพบแล้ว

<base target="_parent" />

สิ่งนี้มีประโยชน์สำหรับการเปิดลิงก์ iframe ทั้งหมดเปิดใน iframe

และ

$(window).load(function(){
    $("a").click(function(){
        top.window.location.href=$(this).attr("href");
        return true;
    })
})

สิ่งนี้เราสามารถใช้ได้ทั้งหน้าหรือบางส่วนของหน้า

ขอบคุณสำหรับความช่วยเหลือของคุณ



0
   <script type="text/javascript"> // if site open in iframe then redirect to main site
        $(function(){
             if(window.top.location != window.self.location)
             {
                top.window.location.href = window.self.location;
             }
        });
    </script>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.