Facebook JavaScriptSDK問題:「FBは定義されていません」
-
14-10-2019 - |
質問
Facebookドキュメントからコピーされた次のコード ここ, 、Chromeで私のために働いていません。
<div id="fb-root"></div>
<script src="http://connect.facebook.net/en_US/all.js"></script>
<script>
FB.init({
appId : 'YOUR APP ID',
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
</script>
JavaScriptコンソールで私は取得します:
Uncaught ReferenceError: FB is not defined
FirefoxやSafariのSDKに問題はありません。
解決
ChromeがFacebookスクリプトをブロックしているWidgetBlockをインストールしたケースを見ました。結果はまさにこのエラーメッセージでした。干渉する可能性のある拡張機能を無効にしてください。
他のヒント
したがって、問題は、実際にあなたがINITが完了するのを待っていないことです。これにより、ランダムな結果が発生します。これが私が使用しているものです。
window.fbAsyncInit = function () {
FB.init({ appId: 'your-app-id', cookie: true, xfbml: true, oauth: true });
// *** here is my code ***
if (typeof facebookInit == 'function') {
facebookInit();
}
};
(function(d){
var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
d.getElementsByTagName('head')[0].appendChild(js);
}(document));
これにより、すべてがロードされると、FacebookInit機能が利用可能になり、実行されます。そうすれば、使用するたびにinitコードを複製する必要はありません。
function facebookInit() {
// do what you would like here
}
このエラーは、FBasyncinit定義の後にセミコロンを省略した場合にも表示されます。
window.fbAsyncInit = function() {
FB.init({
appId: 'YOUR APP ID',
status: true,
cookie: true,
xfbml: true
});
//do stuff
}; //<-- semicolon required!
セミコロンがなければ、状況はこの短い例と同じです。
var x = function () {
console.log('This is never called. Or is it?');
}
('bar');
セミコロンがなければ(「バー」)部分が定義された関数の呼び出しと見なされるため、関数が呼び出されます。
私もこの問題に遭遇しました、そしてそれがFacebookとは何の関係もありませんが、私が含めた以前のスクリプトは悪い形でした
<script type="text/javascript" src="js/my_script.js" />
私はそれを変更しました
<script type="text/javascript" src="js/my_script.js"></script>
そしてそれはうまくいきます...
Weew ...うまくいけば、私の経験は、他の人がほとんどすべてについてやったが、それでもうまくいくことができない他の人を助けることができることを願っています...
ああ男の子... ^^
非同期負荷を試してください: http://developers.facebook.com/docs/reference/javascript/fb.init/
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : 'YOUR APP ID',
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
};
(function() {
var e = document.createElement('script');
e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
e.async = true;
document.getElementById('fb-root').appendChild(e);
}());
</script>
Ajaxを介してFacebookのJavaScriptをロードする非常に乱雑なコーディがあり、fb.initを呼び出す前にJSファイルが完全にロードされていることを確認する必要がありました。
$jQuery.load( document.location.protocol + '//connect.facebook.net/en_US/all.js',
function (obj) {
FB.init({
appId : 'YOUR APP ID',
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
//ANy other FB.related javascript here
});
このコードはjQueryを使用してJavaScriptをロードし、JavaScriptの関数コールバックオンロードを実行します。最終的にはIE6、7、および8ではあまりうまく機能しなかったブロック用のオンロードイベントリストナーを作成するよりもはるかに厄介ではありません
Adblockは、Facebook JS APIスクリプトをブロックします。これは、Facebook Connectに関連しているため、しばしば迷惑なものです。
あなたがまだこの問題を抱えているかどうかはわかりませんが、私は同じ問題を抱えているだけで、FacebookではないすべてのWebサイトからFacebookをブロックしている拡張機能があることが判明しました。それを無効にし、うまくいきました!
時々fb.initが宣言されるのに時間がかかることがあるので、setimeoutを使用してください
function testAPI() {
console.log('Welcome! Fetching your information.... ');
FB.api('/me', function(response) {
console.log('Good to see you, ' + response.name + '.');
});
}
function login() {
FB.login(function(response) {
if (response.authResponse) {
testAPI();
} else {
// cancelled
}
});
}
setTimeout(function() {
login();
},2000);
スクリプトをヘッドセクションにロードしてみてください。さらに、次のような呼び出しの下でスクリプトを定義する方が良いでしょう。 document.ready
, 、これらのスクリプトをボディセクションで定義した場合
私は同じ問題を抱えていましたが、私が見つけた唯一の解決策は、initスクリプト内でFBステートメントを使用したすべてのものを配置することでした。また、非同期ロードを使用したため、コールバック関数はFBを必要とするすべてのものです。私はPHPをDinamycallyにロードした一般的なページを持っていますので、すべてが少し乱雑になっているが機能している場合、PHPによって制御されるさまざまなFacebook関数が必要です。 FB宣言を読み込みスクリプトから取り出してみようとすると、Firefoxは「FBが定義されていない」メッセージを示します。それが何でも役立つことを願っています。
FBが終了していないというMattysの提案をテストするために、スクリプトにアラートを付けました。これにより、私が制御できる遅延が発生します。案の定...それはタイミングの問題でした。
$("document").ready(function () {
// Wait...
alert('Click ok to init');
try {
FB.init({
appId: '###', // App ID
status: true, // check login status
cookie: true, // enable cookies to allow the server to access the session
xfbml: true // parse XFBML
});
}
catch (err) {
txt = "There was an error on this page.\n\n";
txt += "Error description: " + err.message + "\n\n";
txt += "Click OK to continue.\n\n";
alert(txt);
}
FB.Event.subscribe('auth.statusChange', OnLogin);
});
私は同じ問題を抱えていて、原因を見つけました。
私はアバストを持っています!私のコンピューターにアンチウイルスがインストールされ、Chromeプラグインのアップデートをインストールするように依頼しました。新しい avast! plugin for chrome
広告と追跡をブロックする機能があり、デフォルトではFacebookアクセスをブロックします。 AvastでFacebookを許可する問題を解決しました!必要なWebサイト用のChromeプラグイン。
この質問は非常に古いので、一部の人々は私と同じ原因を持っているかもしれない、新しいアバストだと思います!クロムプラグイン。
あなたのための解決策があります:)
ウィンドウが読み込まれた後、スクリプトを実行する必要があります
jqueryを使用する場合、簡単な方法を使用できます。
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : 'your-app-id',
xfbml : true,
status : true,
version : 'v2.5'
});
};
(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_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script>
<script>
$(window).load(function() {
var comment_callback = function(response) {
console.log("comment_callback");
console.log(response);
}
FB.Event.subscribe('comment.create', comment_callback);
FB.Event.subscribe('comment.remove', comment_callback);
});
</script>
同じ問題がありました。ソリューションは、debug.core.jsの代わりにcore.jsを使用することでした
Facebookは、SDKを非同期的にロードして、ページに必要な他のスクリプトをブロックしないようにすることを好みますが、 iframe
FBが完全に作成される前に、FBオブジェクトが完全に作成される前に、コンソールがFBオブジェクトのメソッドを呼び出そうとする可能性があります。 fbAsyncInit
働き。
JavaScriptを同期してロードしてみてください。もうエラーが発生しないでください。これを行うには、Facebookが提供するコードをコピーして貼り付けて、外部に配置できます .js
ファイルしてからそれを含めます .js
aのファイル <script>
のタグ <head>
あなたのページの。 SDKを非同期にロードする必要がある場合は、電話をかける前に最初にFBを作成することを確認してください init
働き。
同様の問題がありましたが、Adblocker Proであることが判明しました。これまたは他のブロッキング拡張機能が無効になっていることを確認してください。これにより、約1時間30分間失いました。そのようなnoobのように感じます;)
現在のアプリケーションIDにAppIDプロパティを設定しましたか?
jqueryを使用している場合は、jqueryコールでFBを入れてみてください
例えば
$(document).ready(function(){
FB.Event.subscribe('auth.login', function(){
alert('logged in!');
});
});
それは私のために働いた