Jak wymusić otwieranie łącza z elementu iframe w oknie nadrzędnym


Odpowiedzi:


617

Odkryłem, że najlepszym rozwiązaniem było użycie tagu podstawowego . Dodaj następujący tekst do nagłówka strony w ramce iframe:

<base target="_parent">

Spowoduje to załadowanie wszystkich linków na stronie w oknie nadrzędnym. Jeśli chcesz, aby Twoje linki ładowały się w nowym oknie, użyj:

<base target="_blank">

Ten tag jest w pełni obsługiwany we wszystkich przeglądarkach.


4
Jak to działa w różnych przeglądarkach?
Charlie Schliesser

3
@ Wilf nie byłem całkiem poprawny:;) <base target>powinien pojawić się wcześniej <a href>, ponieważ ustawia domyślny kontekst przeglądania dla następujących linków; <base href>powinien <* href> <* src> <form action> <object data>znajdować się przed dowolnym odwołaniem do adresu URL ( …), ponieważ ustawia podstawowy adres URL, względem którego są rozwiązywane względne adresy URL.
sam

5
dlaczego odpowiedziałeś na to pytanie rok po tym, jak na nie odpowiedziałem, dokładnie taką samą odpowiedzią? ale zostałeś wybrany. to takie dziwne.
vsync,

5
Myślę, że to dlatego, że twoja odpowiedź otwiera link w nowym oknie, podczas gdy moja otwiera go w oknie nadrzędnym iframe, co było pierwotnym pytaniem. Przepraszam, że ukradłem twój piorun!
Chris Vasselli,

1
Zauważ, że <basetag nie ma zamknięcia zgodnie ze specyfikacją w3.org/TR/html5/document-metadata#the-base-element, więc powinien być<base target="_parent" >
Mark Schultheiss

147

Użyj atrybutu target:

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

1
próbuję tego, jest otwarty w nowym oknie
Haim Evgi

3
+1 ode mnie, podstawowy cel = „_ rodzic” działa, ale cel = „_ rodzic” nigdy mnie nie zawiódł!

7
<base target="_blank">jest w porządku, ale pytanie tutaj dotyczy jednego linku, a nie zmiany zachowania wszystkich linków w ramce iframe. Dla mnie to poprawna odpowiedź.
kriskodzi

34

Z JavaScript:

window.parent.location.href= "http://www.google.com";

28

Możesz użyć dowolnych opcji

w przypadku tylko strony nadrzędnej:

jeśli chcesz otworzyć wszystkie łącza do strony nadrzędnej lub nadrzędnego elementu iframe, użyj następującego kodu w sekcji head elementu iframe:

<base target="_parent" />

LUB

jeśli chcesz otworzyć określony link do strony nadrzędnej lub nadrzędnej ramki pływającej, użyj następującego sposobu:

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

LUB

w przypadku zagnieżdżonego elementu iframe:

Jeśli chcesz otworzyć wszystkie łącza do okna przeglądarki (przekierowanie w adresie URL przeglądarki), użyj następującego kodu w sekcji nagłówka 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>

LUB

jeśli chcesz otworzyć określony link do okna przeglądarki (przekierowanie w adresie URL przeglądarki), skorzystaj z następującego sposobu:

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

lub

<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
Dobra odpowiedź, musiałem po prostu użyć tego dla konkretnego linku, ale zaakceptowana odpowiedź opisuje tylko, jak zmienić cel dla wszystkich linków na stronie. Dzięki
dading84

15

Istnieje element HTML o nazwie, basektóry pozwala:

Podaj domyślny adres URL i domyślny cel dla wszystkich linków na stronie:

<base target="_blank" />

Określając _blank, upewnij się, że wszystkie linki w ramce iframe zostaną otwarte na zewnątrz.


czy jest to dziedziczone w zagnieżdżonych elementach iframe?
beppe9000


7

Wypróbuj target="_parent" atrybut wewnątrz anchor tag.


próbuję tego, jest otwarty w nowym oknie
Haim Evgi

4
Spróbuj target = "_ top". Iframe może zawierać zagnieżdżone iframe? Czy rzeczywisty link jest otwierany przez javascript na zdarzeniu onclick?
Gee

5

Jeśli używasz elementu iframe na swojej stronie internetowej, możesz napotkać problem podczas zmiany całej strony za pomocą hiperłącza HTML (tag kotwicy) z elementu iframe. Istnieją dwa rozwiązania w celu złagodzenia tego problemu.

Rozwiązanie 1. Możesz użyć atrybutu target tagu zakotwiczenia, jak podano w poniższym przykładzie.

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

Rozwiązanie 2. Możesz także otworzyć nową stronę w oknie nadrzędnym z iframe z JavaScript.

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

Pamiętaj, że ⇒ target="_parent"jest przestarzałe w XHTML, ale nadal jest obsługiwane w HTML 5.x.

Więcej można przeczytać pod następującym linkiem http://www.kriblog.com/html/link-of-iframe-open-in-the-parent-window.html


4

Najbardziej wszechstronnym i najbardziej uniwersalnym rozwiązaniem dla różnych przeglądarek jest uniknięcie użycia znacznika „base”, a zamiast tego użycie atrybutu target znaczników „a”:

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

<base>Tag jest mniej wszechstronny i przeglądarek są niespójne w ich wymaganiach dotyczących jego umieszczenia w dokumencie, wymagając więcej badań w różnych przeglądarkach. W zależności od projektu i sytuacji osiągnięcie idealnego położenia w różnych przeglądarkach może być trudne lub nawet całkowicie niewykonalne<base> znacznika w .

Wykonanie tego z target="_parent"atrybutem <a>tagu jest nie tylko bardziej przyjazne dla przeglądarki, ale pozwala również rozróżnić łącza, które chcesz otworzyć w ramce iframe, i te, które chcesz otworzyć w elemencie nadrzędnym.


3

<a target="parent">otworzy linki w nowej karcie / oknie ... <a target="_parent">otworzy linki w oknie nadrzędnym / bieżącym, bez otwierania nowych kart / okien. Don't_forget_that_underscore!


2

Tak, znalazłem

<base target="_parent" />

Jest to przydatne do otwierania wszystkich łączy iframe otwartych w iframe.

I

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

Możemy to wykorzystać dla całej strony lub określonej części strony.

Dziękuję wszystkim za pomoc.


1

Próbować target="_top"

<a href="http://example.com" target="_top">
   This link will open in same but parent window of iframe.
</a>

to nie "_top"to samo co "_parent"?
svelandiag

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>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.