La tentative de JavaScript dangereuse d'accéder au cadre avec l'URL

Je reçois l'erreur ci-dessous lorsque j'essaie de définir une valeur de hachage à l'URL parent d'iframe qui contient une autre URL de domaine:

La tentative de JavaScript dangereuse d'accéder au cadre avec l'URL "URL1" de la trame avec l'URL "URL2". Les domaines, les protocoles et les ports doivent correspondre.

Comment puis-je résoudre ce problème?

À partir d'un document enfant d'origine différente, vous n'êtes pas autorisé à accéder à la propriété location.hash la fenêtre supérieure, mais vous pouvez définir la propriété de location elle-même.

Cela signifie que, étant donné que l'emplacement supérieur de Windows est http://example.com/page/ , au lieu de faire

 parent.location.hash = "#foobar"; 

Vous devez connaître l'emplacement des parents et faire

 parent.location = "http://example.com/page/#foobar"; 

Étant donné que la ressource n'est pas naviguée, cela fonctionnera comme prévu, en modifiant uniquement la partie hachage de l'url.

Si vous utilisez ceci pour la communication entre domaines, je recommanderais plutôt l'utilisation de easyXDM .

Crossframe-Scripting n'est pas possible lorsque les deux images ont des domaines différents -> Sécurité.

Voir ceci: http://javascript.about.com/od/reference/a/frame3.htm

Maintenant, pour répondre à votre question: il n'y a pas de solution ou de travail, vous devriez simplement vérifier votre conception de site Web pour qu'il y ait deux images de différents domaines qui changent l'URL de l'autre.

J'avais le même message d'erreur lorsque j'ai essayé de chamer le domaine pour iframe.src.

Pour moi, la réponse a été de changer le iframe.src sur une URL sur le même domaine, mais qui était en fait une page html re-direct vers le domaine souhaité. L'autre domaine apparaît alors dans mon iframe sans aucune erreur.

A travaillé comme un charme. 🙂

Une solution pourrait être d'utiliser un fichier local qui récupère le contenu distant

RemoteInclude.php

 <?php $url = $_GET['url']; $contents = file_get_contents($url); echo $contents; 

Le HTML

 <iframe frameborder="1" id="frametest" src="/remoteInclude.php?url=REMOTE_URL_HERE"></iframe> <script> $("#frametest").load(function (){ var contents =$("#frametest").contents(); }); 

J'ai trouvé que l'utilisation de la version XFBML du bouton Facebook comme bouton au lieu de la version HTML5 a résolu ce problème. Ajoutez le code ci-dessous où vous souhaitez que le bouton apparaisse:

 <div id="fb-root"></div> <script>(function (d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk'));</script> <fb:like send="true" layout="button_count" width="50" show_faces="false" font="arial"></fb:like> 

Ensuite, ajoutez ceci à votre balise HTML:

  xmlns:fb="http://ogp.me/ns/fb#" 

Le problème est même si vous créez un proxy ou que vous chargez le contenu et que vous l'injectez comme s'il s'agissait d'un local, tous les scripts que ce contenu définira seront chargés à partir de l'autre domaine et provoqueront des problèmes entre domaines.