web-dev-qa-db-fra.com

Comment ouvrir tous les liens d'un iframe dans un nouvel onglet

J'essaie de faire en sorte que lorsque vous cliquez sur un lien dans un <iframe>, Il ouvrira le lien dans un nouvel onglet - pas dans le <iframe>. Veuillez noter que je n'ai aucun contrôle sur le contenu que les gens consultent via le <iframe>.

J'essaie de le faire avec javascript éventuellement, comme $('a').setAttribute('target','_blank'); mais ça ne marche pas pour moi. J'ai aussi dans mon document HTML <base target="_blank">, Ça ne fait pas l'affaire aussi.

Est-ce impossible? Ou est-ce que je cherche juste aux mauvais endroits? Merci d'avance!

13
Darryl Huffman

Je m'attendrais à ceci:

$('a').setAttribute('target','_blank');

.. pour échouer (en silence - car jquery échoue généralement en silence) car, si le contenu de l'iFrame provient d'un domaine différent, il y a des problèmes d'accès à la manipulation de la page dans l'iFrame à partir de la page contenant.

C'est-à-dire: si votre propre page est du domaine a (par exemple mysite.com), et que l'iframe est du domaine b (par exemple someothersite.com), le comportement de sécurité du navigateur Web est tel que l'utilisation de javascript pour manipuler le contenu iFrame donnera un Erreur "Accès refusé".

Si vous deviez utiliser du javascript non jquery, vous verrez l'erreur. Depuis la page parent, quelque chose comme ça:

window.frames["iFrameName"].getElementsByTagName("a")[0].target="_blank"

vous verrez l'erreur.

Malheureusement, je ne sais pas ce que vous pouvez faire à ce sujet. Il est délibéré d'arrêter un site Web, y compris un autre, et de modifier le contenu après le chargement afin qu'il indique autre chose.

Une solution consiste à appeler un script sur votre serveur (c'est-à-dire le même domaine) et à transmettre une URL. Le script obtient le contenu de la page que vous recherchiez et le régurgite sur votre navigateur, vous aurez donc le contenu de la page Web que vous souhaitez, mais son adresse se trouve sur votre site. Par exemple, s'il s'agissait de php:

http://votredomaine.com/getURL.php?url=http:www.google.com

Attention cependant aux problèmes d'authentification

9
user2808054

Pour charger tous les liens de la page dans la fenêtre parent, utilisez:

<base target="_parent" />

sinon dans une nouvelle fenêtre utilisez:

<base target="_blank" />
17
ronish

en utilisant javascript

var links= document.getElementsByTagName('a');
for (var i=0; i<links.length; i++){
   links[i].setAttribute('target', '_top');
}

en utilisant jquery

$('a').each(function() {
   var a = new RegExp('/' + window.location.Host + '/');
   if (!a.test(this.href)) {
       $(this).attr("target","_top");
   }
});
2
Ratan Paul

vérifiez cette solution, cela m'a aidé: Faire des liens à l'intérieur d'un iframe ouvert dans une nouvelle fenêtre

ou vous pouvez essayer parent.window.open ("{{your location}}");

1
Liad Livnat

Remplacez target='blank' Par onclick='window.open();'

1
alice

Utilisez $('a').attr('target','_blank'); au lieu de setAttribute ...

VIOLON

0
Karim AG