60 votes

Facebook donne l'erreur "Une tentative JavaScript non sécurisée d'accéder au cadre avec l'URL" dans Chrome

Mon exemple de Facebook app a été génial de travailler hier dans google Chrome. La page s'intègre Silverlight ad Facebook via le SDK JavaScript. Je peux vérifiez leur état de connexion, connectez-vous à Facebook, votre nom et de vous déconnecter.

Aujourd'hui, sans aucune modification de ma part, il est cassé en Chrome avec une erreur JavaScript qui est très fréquent sur les résultats de recherche Google, mais pas de vraies réponses. Il fonctionne toujours grande dans IE et Firefox.

Voici l'URL publique:

http://www.andrewdothay.net/prj/facebook/

Lorsque vous ouvrez la console JavaScript de Chrome, il jette des tonnes de ces erreurs:


Dangereux JavaScript tentative d'accès à une image avec l'URL

http://www.facebook.com/login.php?api_key=151352704876752&cancel_url=http%3A%2F%2Fstatic.ak.fbcdn.net%2Fconnect%2Fxd_proxy.php%23cb%3Df1175dd3f%26origin%3Dhttp%253A%252F%252Fwww.andrewdothay.net%252Ff304d89d8%26relation%3Dopener%26transport%3Dpostmessage%26frame%3Df3760623c%26result%3DxxRESULTTOKENxx&channel_url=http%3A%2F%2Fwww.andrewdothay.net%2Fprj%2Ffacebook%2F&display=popup&fbconnect=1&locale=en_US&method=auth.login&next=http%3A%2F%2Fstatic.ak.fbcdn.net%2Fconnect%2Fxd_proxy.php%23cb%3Df3c546942%26origin%3Dhttp%253A%252F%252Fwww.andrewdothay.net%252Ff304d89d8%26relation%3Dopener%26transport%3Dpostmessage%26frame%3Df3760623c%26result%3DxxRESULTTOKENxx&return_session=1&sdk=joey&session_version=3&v=1.0 à partir de l'image avec l'URL http://www.andrewdothay.net/prj/facebook/.

Les domaines, les protocoles et les ports doivent correspondre.


Toutes les idées sur ce qu'il se passe avec Chrome ici?


Mise à jour

J'ai découvert que google Chrome sur l'aujourd'hui de la machine était de bloquer les pop-up de connexion quand j'étais appel de FB.login(), mais je sais que je n'étais pas ceux de 190 messages d'erreur dans la console JavaScript hier.

Donc, quand j'ai autoriser les pop-ups dans Chrome, il fonctionne pour un utilisateur final, mais de tous les messages d'erreur sont en train de tuer mon diagnostic expérience en tant que développeur.

29voto

Mücahit Yılmaz Points 471

J'ai trouvé la solution. Si vous exécutez FB.connexion sans action de l'utilisateur, webkit bloque les fenêtres pop-up.

Par exemple, j'ai utilisé une invitation système sur mon projet. Il y avait une entrée/texte pour entrer du code d'invitation. J'ai vérifié le code d'invitation est disponible avec un ajax/requête post. si elle est disponible, je run FB.login(). Comme vous le devinez, le navigateur bloqué popup et des tonnes d'erreurs sont apparues à la js console.

Donc, vous devez exécuter FB.login() après une action de l'utilisateur. Je vais mettre un facebook bouton de connexion entre ajax/post et FB.login(). Les utilisateurs aurez à cliquer dessus, c'est suce - mais ils ne verrez pas un problème.

Btw, le problème se fait en quelques jours. Je pense que c'est une question de confiance du système de navigateur. Lorsque vous êtes la développer, de vous faire visiter des tas de fois, le navigateur pense que c'est fiable au premier abord. Je ne suis pas sûr de cette partie, mais ma solution fonctionne.

5voto

Meta Points 264

Dans mon cas, c'était à cause de Facebook JS chargé plusieurs fois sur une seule page: un pour le login et un second pour le bouton "J'aime". La suppression de la référence dans le module "like" permet de gagner du temps.

2voto

sodamnmad Points 61

Mücahit Yılmaz est correct. Prenons l'exemple, j'ai collé ci-dessous et si vous utilisez le setTimeout() la méthode d'échec, d'autres sages, il fonctionne. Je reçois toujours le message d'avertissement dans une boucle jusqu'à ce que j'ai bien de se connecter, mais c'est un petit prix à payer. Je suis sûr que les utilisateurs ne peuvent pas voir.

$(document).ready(function() {
$("#facebook_link").click(function() {
    //setTimeout(fb);
    fb();
    return false;
});

function fb() {
    FB.getLoginStatus(function(response) {
        if (response.session) {
            // logged in and connected user, someone you know
            gotResponse(response);
        } else {
            // no user session available, someone you dont know
            FB.login(function(response) {
                if (response.session) {
                    // user successfully logged in
                    gotResponse(response);
                } else {
                    // user cancelled login, do nothing
                }
            });
        }
    });
}

function gotResponse(response) {
    console.dir(response);
}

});

Il est facile à reproduire: connectez-vous à facebook dans un autre onglet, puis essayez ce code et vous verrez pas d'avertissements. Déconnexion, puis d'essayer le code et vous obtenez les mises en garde. C'est parce qu'il frappe le .connexion du bloc.

2voto

fjsj Points 2817

Dans mon cas, le problème était lié à la balise <div id="fb-root"></div> . Je ne le mettais pas immédiatement après la balise <body> d'ouverture, comme recommandé par la documentation .

Après l'avoir placée au bon endroit, l'erreur "Unsafe JavaScript ..." s'est arrêtée.

1voto

George Foster Points 11

J'ai eu ce problème avec un navigateur chrome et c'était à cause de mon paramètres de chrome. J'ai eu le navigateur afin de refuser le 3e parties des sites de réglage des données de cookie. Permettant des Pop-ups n'a pas été un problème pour moi. Lorsque le facebook de l'iFrame est créé, il doit définir un cookie qu'il utilise ensuite pour vérifier si l'utilisateur doit se connecter. Si le cookie n'est pas possible de définir puis de défaillance du site. Une chose qui serait utile dans le facebook api serait un paramètre qui indique quand quelque chose ne marche pas. Je ne vois pas ça comme un événement que l'on peut s'abonner et attribuer une fonction de rappel.

Voici un lien vers le FB sdk javascript sur les abonnements. Aucune réponse sur la recherche d'un rappel pour les demandes ayant échoué serait appréciée.
https://developers.facebook.com/docs/reference/javascript/FB.Event.subscribe/

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