Désactiver tous les liens à L'intérieur D'IFRAME en utilisant jQuery

je veux désactiver tous les liens à l'intérieur D'une IFRAME, quand les gens cliquent sur ces liens, l'alerte apparaîtrait.

voici ce que j'ai jusqu'à présent, mais le jQuery ne fait rien. Pas sûr de ce que j'ai fait de mal.

<iframe id='templateframe' name='templateframe' src="templates/template<?php echo $templateID; ?>/login.html"></iframe>

$(document).ready(function(){       
        $('#templateframe').contents().find('a').click(function(event) {
            alert("demo only");

            event.preventDefault();

        }); 
});

Merci d'avance.

23
demandé sur templatetypedef 2011-01-24 03:51:49

9 réponses

ou bien vous pouvez mettre le script dans l'iframe lui-même et donc raccourcir le code de cette façon. Il en fait un briquet de la performance, je crois.

$(document).ready(function(){       
    $('a').click(function(event) {
        alert("demo only");
        event.preventDefault();
    }); 
});
7
répondu lilsizzo 2017-11-13 02:12:13

je m'attends à ce que $(document).ready exécute avant que le contenu de l'iframe est chargé. Essayez d'utiliser le onload attribut pour l'iframe à la place.

14
répondu Mads Mogenshøj 2011-01-24 00:57:53

je suis à la recherche pour désactiver iframe trop de liens et ne pouvais pas trouver une solution. Grâce à HTML5, vous pouvez facilement désactiver les liens en ajoutant simplement le sandbox l'attribut.

<iframe src="externalsite.com" sandbox></iframe>

voir la démo

j'espère que cela aidera quelqu'un à faire une recherche sur le net, d'autant plus que ces questions apparaissent en premier sur Google.

12
répondu Josan Iracheta 2014-12-01 12:23:20

la solution mentionnée par "lol" fonctionne en fait assez bien. Je suis tombé dessus accidentellement après avoir travaillé dessus pendant quelques heures...

mettez votre iframe dans un élément div, puis rendez le div transparent et poussez l'index z de l'iframe derrière le div. Voir cet exemple:

<div class="container">
  <iframe class="lockframe" src="www.google.com"></iframe>
</div>

Alors vos css comme ceci:

div.container { background: transparent; }
div.lockframe { z-index: -2; }

Chargez votre page et le div est ce qui acceptera les événements de clic, pas l'iframe.

8
répondu Zoccadoum 2014-03-29 17:09:33

Une légende sur

http://www.webdeveloper.com/forum/showthread.php?182260-Can-we-disable-links-inside-iframes

a ranimé une technique du bon vieux temps, quand nous n'avions pas d'appels comme -webkit-gradient().

il suffit de mettre une div transparente dessus!

7
répondu lol 2018-06-09 12:23:35

aucune des réponses ci-dessus ne fonctionnera à moins que vous ne chargiez le contenu localement parce que d'ici la fenêtre.l'événement de charge déclenche l'iframe n'a pas encore typiquement chargé. Vous pouvez ajouter un écouteur à l'iframe pour trouver tous les a à l'intérieur de l'iframe et les désactiver.

$("iframe").load(function() {
    $("iframe").contents().find("a").each(function(index) {
        $(this).on("click", function(event) {
            event.preventDefault();
            event.stopPropagation();
        });
    });
});
5
répondu Steven Bennett 2013-05-31 23:13:12

C'est la solution générique de votre problème. Espérons que cela va bien fonctionner.

$(window).load(function(){
    $('#templateframe').contents().find('a').click(function(event) {
        alert("demo only");
        event.preventDefault();
    }); 
});
1
répondu Abdullah Kiser 2012-05-18 06:01:42

je pense qu'aucune des solutions proposées (autre que le bac à sable html5) ne fonctionnera si vous n'avez pas défini Access-Control-Allow-Origin sur le serveur source. Pour résoudre ce problème, dans certains cas, on peut utiliser un serveur mandataire, récupérer le contenu de la page sur un autre serveur, analyser le code html, se débarrasser des liens, et retourner le résultat au navigateur du client.

1
répondu 1man 2015-03-07 20:50:25

comme alternative à la prévention des défauts, vous pouvez changer les ancrages en portées de sorte qu'il soit plus visible que le lien n'est plus le lien.

$('#templateframe').contents().find('a').each(function() {
    $(this).replaceWith($('<span>' + this.innerHTML + '</span>'));
});
0
répondu Bula 2013-05-08 00:00:39