2010-08-26 6 views
59

La mia app Facebook di esempio ha funzionato benissimo ieri in Chrome. La pagina integra Silverlight ad Facebook tramite l'SDK JavaScript. Posso controllare lo stato di accesso di base, accedere a Facebook, ottenere il tuo nome ed effettuare il logout.Facebook dà errore "Unsafe JavaScript tenta di accedere a frame con URL" in Chrome

Oggi, senza modifiche da parte mia, è rotto in Chrome con un errore JavaScript molto comune nei risultati di ricerca di Google, ma senza risposte reali. Funziona ancora alla grande in IE e Firefox.

Ecco l'URL pubblico:

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

Quando si apre la console JavaScript in Chrome, getta tonnellate di questi errori:

tentativo

Unsafe JavaScript per accedere telaio con 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 dal frame con URL http://www.andrewdothay.net/prj/facebook/.

I domini, i protocolli e le porte devono corrispondere.


Qualche idea su cosa sta succedendo con Chrome qui?


Aggiornamento

ho scoperto che Chrome sul computer di oggi è stato bloccando il login pop-up quando stavo chiamando FB.login(), ma so che non è stato sempre quei messaggi di errore 190 nella console JavaScript ieri.

Così, quando autorizzo i popup in Chrome, funziona per un utente finale, ma tutti questi nuovi messaggi di errore stanno uccidendo la mia esperienza diagnostica come sviluppatore.

+0

Molto strano. Ottengo questo errore abbastanza spesso su app di Facebook in chrome, e qualche volta qualcosa di simile in FF. Tuttavia di solito ottengo l'errore solo una volta, e quindi tutto funziona come previsto. – Matt

risposta

28

Ho trovato la soluzione. Se si esegue FB.login senza l'intervento dell'utente, Webkit blocca i popup.

Ad esempio, ho utilizzato un sistema di invito sul mio progetto. C'era un input/testo per inserire il codice di invito. Ho controllato che il codice di invito fosse disponibile con una richiesta Ajax/Post. se è disponibile, eseguo FB.login(). Come puoi immaginare, popup popup bloccati e tonnellate di errori sono stati visualizzati nella console js.

Quindi è necessario eseguire FB.login() dopo un'azione dell'utente. Inserirò un pulsante di accesso di Facebook tra ajax/post e FB.login(). Gli utenti dovranno fare clic su di esso -ha fatto schifo- ma non vedranno un problema.

Btw, il problema si verifica in pochi giorni. Penso che riguardi il sistema di fiducia del browser. Quando lo sviluppi, visiti molte volte, il browser pensa che sia affidabile all'inizio. Non sono sicuro di questa parte, ma la mia soluzione funziona.

+1

Questo significa che non possiamo usare FB.Event.subscribe ('auth.statusChange', onStatus); ? – BeaverProj

+1

@BeaverProj L'ho provato così, non lo so. –

+0

Quanto deve essere vicina l'azione dell'utente alla chiamata FB.login? Mi viene visualizzato un popup ma dice semplicemente "si è verificato un errore. Riprova più tardi". Ho un pulsante che chiama una funzione, che quindi chiama FB.login. Pensi che non sia abbastanza diretto? –

1

Mücahit Yılmaz è corretto. Prendi l'esempio che ho incollato qui sotto e se usi il metodo setTimeout() fallisce, altrimenti funziona. Ricevo ancora il messaggio di avviso in un ciclo finché non effettuo correttamente il login, ma è un piccolo prezzo da pagare. Sono sicuro che gli utenti non lo vedranno.

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

});

È facile da riprodurre: accedi a Facebook in un'altra scheda, quindi prova questo codice e non vedrai avvisi. Esci, quindi prova il codice e ricevi gli avvertimenti. È perché colpisce il blocco .login.

5

Nel mio caso è stato a causa di Facebook JS caricato più volte in un'unica pagina: una per il login e la seconda per il pulsante "mi piace". Rimuovendo riferimento nel modulo "mi piace" si salva il giorno.

+1

Simile per me. Stavo chiamando FB.init dopo aver inizializzato l'SDK con l'URL //connect.facebook.net/en_US/all.js#xfmbl=1&appId=[appId] - Penso che xfmbl = 1 causi un FB.init implicito, sebbene Facebook la documentazione non è conclusiva su questo. Quando ho rimosso la chiamata separata a FB.init, il problema è scomparso. – xgretsch

+0

'xfmbl' (che deve essere letto" transfumble ") non sembra fare la differenza. Ho avuto esattamente lo stesso problema. – Potatoswatter

1

Ho avuto questo problema con un browser Chrome ed era dovuto alle mie impostazioni di Chrome. Avevo il browser impostato per impedire a siti di terze parti di impostare i dati dei cookie. Consentire Popup non era un problema per me. Quando viene creato Facebook iFrame, deve impostare un cookie che poi utilizza per tracciare se l'utente deve effettuare il login. Se questo cookie non può essere impostato, il sito fallisce. Una cosa che sarebbe utile nell'API di Facebook sarebbe un'impostazione che mostra quando qualcosa non funziona. Non lo vedo come un evento a cui è possibile iscriversi e assegnare un callback.

Ecco un collegamento all'SDK javascript FB sulle sottoscrizioni. Sarebbe gradita qualsiasi risposta alla ricerca di una richiamata per richieste non riuscite.
https://developers.facebook.com/docs/reference/javascript/FB.Event.subscribe/

0

La soluzione di Mücahit Yılmaz ha funzionato anche per me. Non avevo bisogno di accedere alle informazioni dell'utente, quindi ho rimosso lo script di accesso dall'app di esempio. Inoltre, è stato rimosso il messaggio di benvenuto e tutte le informazioni che richiedono informazioni memorizzate nella variabile $basic.

1

Nel mio caso il problema era correlato al tag <div id="fb-root"></div>. Non l'ho inserito immediatamente dopo il tag <body> di apertura, as recommended by the docs.

Dopo averlo inserito nella posizione corretta, l'errore "Unsafe JavaScript ..." è stato interrotto.

2

Rimuovere l'opzione 'xfbml: true' dalla mia chiamata FB.init ha risolto questo problema per me.

stavo avendo il problema nel browser Internet di default su Android Jelly Bean

1

E nel mio caso il problema era legato al tipo di protocollo: da:

<div class="fb-like-box" data-href="https://www.facebook.com/xxxxxx" 

a:

<div class="fb-like-box" data-href="http://www.facebook.com/xxxxxx" 

come il mio negozio web non ha usato https Ho rimosso 's' dall'attributo data-href della likebox.

+1

Penso che puoi semplicemente mettere //www.facebook.com/.... Vedi: http: //stackoverflow.com/questions/4831741/can-i-change-all-my-http-links-to-just –

Problemi correlati