私のサンプルFacebookアプリは、昨日Chromeでうまく機能していました。このページは、JavaScript SDKを介してSilverlight広告Facebookを統合します。基本的なログインステータスの確認、Facebookへのログイン、名前の取得、ログアウトができます。
今日、私の変更はありませんでしたが、Chromeで壊れており、Google検索結果で非常によく見られるJavaScriptエラーがありますが、実際の答えはありません。それでもIEおよびFirefox。
公開URLは次のとおりです。
http://www.andrewdothay.net/prj/facebook/
ChromeでJavaScriptコンソールを開くと、次のような大量のエラーがスローされます。
安全でないJavaScriptが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% 25 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%26erlation%3 26transport%3Dpostmessage%26frame%3Df3760623c%26result%3DxxRESULTTOKENxx&return_session = 1&sdk = joey&session_version = 3&v = 1. URLのあるフレームから http://www.andrewdothay.net/prj/facebook/ 。
ドメイン、プロトコル、およびポートは一致する必要があります。
Chromeここで何が起こっているのか?
更新
ChromeはFB.login()を呼び出していたときにログインポップアップをブロックしていたが、昨日JavaScriptコンソールに190のエラーメッセージが表示されていなかったことを知っている。
したがって、Chromeでポップアップを許可すると、エンドユーザーに対しては機能しますが、これらの新しいエラーメッセージはすべて、開発者としての診断経験を殺してしまいます。
私は解決策を見つけました。ユーザーアクションなしでFB.loginを実行すると、webkitはポップアップをブロックします。
たとえば、プロジェクトで招待システムを使用しました。招待コードを入力するための入力/テキストがありました。 ajax/postリクエストで招待コードが利用可能であることを確認しました。使用可能な場合は、FB.login()を実行します。ご想像のとおり、ブラウザがポップアップをブロックし、jsコンソールに大量のエラーが表示されました。
そのため、ユーザーアクションの後にFB.login()を実行する必要があります。 Facebookのログインボタンをajax/postとFB.login()の間に配置します。ユーザーはクリックする必要があります-残念ですが、問題は表示されません。
ところで、問題は数日後に再発します。ブラウザの信頼システムについてだと思います。開発中は何度もアクセスしますが、ブラウザは最初は信頼できると考えています。この部分についてはわかりませんが、私の解決策は機能します。
私の場合、それはFacebook JSが単一のページで複数回ロードされたためでした。1つはログイン用で、もう1つは「いいね」ボタン用です。 「いいね」モジュールの参照を削除すると、1日を節約できます。
私の場合、問題は<div id="fb-root"></div>
タグに関連していました。最初の<body>
タグの直後に配置していませんでした ドキュメントの推奨どおり 。
適切な場所に配置すると、「安全でないJavaScript ...」エラーが停止しました。
FB.init呼び出しから「xfbml:true」オプションを削除すると、これが修正されました。
Android Jelly beanのデフォルトのインターネットブラウザで問題が発生していました
MücahitYılmazは正しい。以下に貼り付けた例を見てください。setTimeout()メソッドを使用すると失敗しますが、それ以外の場合は動作します。適切にログインするまで、警告メッセージがループで表示されますが、支払うのは少額です。ユーザーには表示されないはずです。
$(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);
}
});
簡単に再現できます。別のタブでFacebookにログインしてから、このコードを試しても警告は表示されません。ログアウトしてからコードを試してください。警告が表示されます。これは、.loginブロックにヒットするためです。
chromeブラウザーでこの問題が発生しました。これは、chrome設定です。サードパーティのサイトでCookieデータを設定できないようにブラウザーを設定しました。ポップアップを許可することは私にとっては問題ではありませんでした。facebookiFrameの作成時に、ユーザーがログインする必要があるかどうかを追跡するために使用するCookieを設定する必要があります。 facebook apiで役立つものの1つは、何かが失敗したときに表示される設定です。
サブスクリプションのFB javascript sdkへのリンクを次に示します。失敗したリクエストのコールバックを見つける際の応答は歓迎されます。
https://developers.facebook.com/docs/reference/javascript/FB.Event.subscribe/
そして私の場合、問題はプロトコルのタイプに関連していました:from:
<div class="fb-like-box" data-href="https://www.facebook.com/xxxxxx"
に:
<div class="fb-like-box" data-href="http://www.facebook.com/xxxxxx"
私のWebストアはhttpsを使用しなかったため、likeboxのdata-href属性から「s」を削除しました。
MücahitYılmazのソリューションも同様に機能しました。ユーザーの情報にアクセスする必要はなかったので、サンプルアプリからログインスクリプトを削除しました。また、ウェルカムメッセージと、$basic
変数。