質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Facebook

Facebookは、実名登録制のSNS(ソーシャル・ネットワーキング・サービス)です。開発者用のデベロッパーサイトが存在し、一般ユーザーによるFacebook向けアプリケーション開発が可能です。

Q&A

1回答

2747閲覧

FBウェブサービスで「Uncaught Error: init not called with valid version」

ork_shinnosuke

総合スコア6

Facebook

Facebookは、実名登録制のSNS(ソーシャル・ネットワーキング・サービス)です。開発者用のデベロッパーサイトが存在し、一般ユーザーによるFacebook向けアプリケーション開発が可能です。

0グッド

0クリップ

投稿2015/07/01 02:00

Facebook APIを使ったウェブサービスを修正しているのですが、以下のエラーが出ています。

Uncaught Error: init not called with valid version

Facebook APIのバージョンは2.0です。

stackoverflowにて同様の投稿を見つけ、そこには以下のように書いてありました。
▼投稿
http://stackoverflow.com/questions/24019877/fb-init-function-gives-wrong-version-error

▼解決策

<body>の直後、かつFB.init({})の前に以下のdivタグを追加 <div id="fb-root"></div>

しかしながらこちら解決せず、sdk.jsの内容を修正というのも、外部のファイルを読み込んでいるのでできません。(connect.facebook.net/ja_JP/sdk.js読み込み)

どなたかどういうのエラーに苦しんでいる方、何かヒントを知っている方、できれば解決策をご存知の方、コメントをいただければ幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

もう何年も前の質問に答えてもしょうがないかもしれないですが、今でも悩んでいるプログラマーはいるので、検索で引っかかってくれたらうれしいです。

私も本当に参りました。
でも、およその原因がわかり、対策も講じることができたのでお伝えします。
何のきっかけでこんなことになるかというとFacebookAPIを利用したアプリケーションづくりです。APIをJavascriptから利用するというのが、Facebook Deveropperのページでも紹介されており、手軽に利用できるのでお勧めなのですが、ここで披露されているコードに問題ありです。
問題のコードは、

window.fbAsyncInit = function() { FB.init({ appId : '{your-app-id}', cookie : true, xfbml : true, version : '{api-version}' }); FB.AppEvents.logPageView(); }; (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 = "https://connect.facebook.net/en_US/sdk.js"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk')); </script>

となっています。
このなかでwindow.fbAsyncInit = function()という関数を理解していないとハマります。そう、非同期処理なのです。この中のFB.initの処理が終わる前に、FB.apiなどのコマンドを使うとinit not called with valid versionというようなエラーがでるのです。FBの初期化が終わっていないよというエラーが出ればいいのですが、APIのバージョンが違うというようなエラーが出るのでややこしいのです。
しかも、私の場合は$(windows).loadの中にFB.apiを書いたので、エラーが出たり出なかったり、ブラウザによって挙動が違うというドツボにはまりました。
対策はまあ簡単といえば簡単で、

window.fbAsyncInit = function() { FB.init({ appId : plugin_path.fb_app, cookie : true, xfbml : true, version : 'v14.0' }); <ここにFB.apiなどの処理を書く> }

要するにコールバック関数の中に処理を書いてやればいいということでした。FB.initは一度ページ内で実行すれば、そのページ内では有効なので、そのあとは気にしなくても大丈夫のようです。
でも、本当に疲れました。

投稿2023/01/20 11:33

ITmaroon

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問