113 votes

JavaScript non sécurisé tente d'accéder au cadre avec l'URL

J'obtiens l'erreur ci-dessous lorsque j'essaie de définir une valeur de hachage pour l'url parent à partir d'iframe qui contient une autre URL de domaine:

JavaScript non sécurisé tente d'accéder au cadre avec l'URL "URL1" du cadre avec l'URL "URL2". Les domaines, protocoles et ports doivent correspondre.

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

125voto

Sean Kinsey Points 17117

À partir d'un document enfant d'origine différente vous n'êtes pas autorisé à accéder au haut des fenêtres location.hash de la propriété, mais vous êtes autorisé à définir le location de la propriété elle-même.

Cela signifie qu'étant donné que le haut de localisation windows est - http://example.com/page/, au lieu de faire

parent.location.hash = "#foobar";

vous avez besoin de connaître les parents de l'emplacement et de faire

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

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

Si vous utilisez ce pour les communications inter-domaines, alors je vous recommande d'utiliser easyXDM à la place.

14voto

EvilMM Points 789

Le script crossframe n'est pas possible lorsque les deux cadres ont des domaines différents -> Security.

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 solution, il vous suffit de vérifier la conception de votre site Web pour savoir pourquoi il doit y avoir deux cadres de différents domaines modifiant l'URL de l'autre.

10voto

Tommy Points 91

Je recevais le même message d'erreur lorsque j'ai essayé de modifier le domaine pour iframe.src.

Pour moi, la réponse était de changer l'iframe.src en url sur le domaine SAME, mais qui était en fait une page de redirection html vers le domaine souhaité. L'autre domaine apparaît alors dans mon iframe sans aucune erreur.

Travaillé comme un charme. :)

7voto

René de Kat Points 78

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();
});
 

3voto

Luke Alderton Points 529

J'ai trouvé que l'utilisation de la version XFBML du bouton similaire à Facebook au lieu de la version HTML5 corrigeait ce problème. Ajoutez le code ci-dessous où vous voulez 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>
 

Ajoutez ensuite ceci à votre balise HTML:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X