Cet article décrit la méthode de JS pour empêcher les pages Web d'être intégrées dans le cadre IFRAME. Partagez-le pour votre référence, comme suit:
Par exemple:
<script type = "text / javascript"> if (fenêtre! = top) // Déterminez si l'objet de fenêtre actuel est un objet supérieur top.location.href = window.location.href; // Sinon, dirigez automatiquement l'URL de l'objet supérieur à l'URL qui est intégrée dans la page Web </cript>
Ce code est valide. Cependant, il y a un problème: après l'avoir utilisé, personne ne peut intégrer votre page Web dans le cadre, y compris vous-même.
Donc, aujourd'hui, j'examine s'il existe un moyen de faire en sorte que mes pages Web uniquement intégrées dans mon propre cadre, pas les cadres des autres?
En surface, cette question est très simple. Faites simplement un jugement: si les noms de domaine du cadre actuel et du cadre de niveau supérieur sont les mêmes, et si la réponse est non, une redirection d'URL est effectuée.
if (top.location.hostname! = window.location.hostname) {top.location.href = window.location.href;}Cependant, de façon inattendue, cette écriture est erronée et ne peut pas être exécutée du tout. Pouvez-vous voir où est l'erreur?
Supposons que top.location.hostname est www.111.com et window.location.hostname est www.222.com. C'est-à-dire que 111.com intégre 222.com dans sa page Web. Pour le moment, que se passera-t-il si vous comparez top.location.hostname! = Window.location.hostname?
Le navigateur invitera une erreur de code!
Parce qu'ils sont du domaine croisé, la politique de sécurité du navigateur ne permet pas aux pages Web de 222.com de faire fonctionner les pages Web de 111.com, et vice versa. IE appelle cette erreur "aucune autorisation". De plus, le navigateur ne vous permet même pas d'afficher TOP.LOCATION.HOSTNAME. Dans les cas de domaine croisé, vous signalerez directement une erreur dès que vous verrez cet objet.
Alors, comment le code doit-il être modifié?
En fait, cela nous invite à vérifier si le top.location.hostname est signalé comme une erreur. Si une erreur est signalée, cela indique qu'il y a un domaine croisé et que l'objet supérieur sera redirigé; Si une erreur est signalée, cela indique qu'il n'y a pas de domaine croisé (ou que le cadre n'est pas utilisé), alors aucune action ne sera prise.
try {top.location.hostname;} catch (e) {top.location.href = window.location.href;}Ceci est écrit correctement et peut être exécuté correctement dans IE et Firefox. Cependant, Chrome aura une erreur. Pour une raison quelconque, dans les situations de domaine croisé, Chrome ne signale pas d'erreur à TOP.Location.hostname!
Il n'y a aucun moyen, je ne peux qu'ajouter un autre morceau de code supplémentaire pour Chrome.
essayez {top.location.hostname; if (top.Location.hostname! = window.location.hostname) {top.location.href = window.location.href; }} catch (e) {top.location.href = window.location.href;}Ok, le code de version amélioré est terminé. À l'exception des noms de domaine locaux, aucun autre nom de domaine ne peut intégrer votre page Web dans le cadre.
Pour plus d'informations sur le contenu lié à JavaScript, veuillez consulter les sujets de ce site: "Résumé de l'opération JavaScript Iframe Skills", "Résumé des compétences de l'opération JavaScript", "Résumé des compétences en algorithme JavaScript", "Résumé des effets spéciaux JavaScript et des compétences en javascript des effets spéciaux et des effets spéciaux", "Résumé du javascript. Compétences "," Résumé des effets et compétences spéciaux de l'animation JavaScript "," Résumé des erreurs JavaScript et des compétences de débogage "et" Résumé de l'algorithme et compétences de traverse JavaScript "
J'espère que cet article sera utile à la programmation JavaScript de tous.