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.

Chris Vasselli
źródło
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>
nnevala
źródło
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";
Yenssen
źródło
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>
Ahosan Karim Asik
źródło
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.

vsync
źródło
czy jest to dziedziczone w zagnieżdżonych elementach iframe?
beppe9000
7

Jak wspomniano, możesz użyć atrybutu target, ale technicznie był on przestarzały w XHTML. To pozostawia cię przy użyciu javascript, zwykle coś takiego parent.window.location.

Ryan McGrath
źródło
@ PaulD. Czekaj na link, który opublikowałeś teraz 404s.
Dan Loewenherz
1
@ Dan: aha, tak, dziękuję. Świeży link: dev.w3.org/html5/spec/…
Paul D. Waite
7

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

Ojej
źródło
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

użytkownik1788142
źródło
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.

Adelmar
źródło
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!

krisjd
źródło
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.

Ratan Paul
źródło
1

Próbować target="_top"

<a href="http://example.com" target="_top">
   This link will open in same but parent window of iframe.
</a>
Aamir Shahzad
źródło
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>
Sandeep Kumar
źródło