私は何を達成しようとしていますか。スクリプト タグを HTML に貼り付けたり、アプリの詳細を手動で入力したりせずに Facebook Javascript SDK を読み込むモジュールを作成するには、時間の無駄に思えるかもしれませんが、私には理にかなっているように思えます。たとえば、このモジュールは詳細を含む構成を取り、HTML ファイルにある初期化コードとスクリプト ファイルにある残りのロジックの代わりに、Javascript を介してすべてを設定できます。
私の問題。スクリプトを動的に追加すると、
<div id="fb-root"></div>
エラーが発生する
FB.init は既に呼び出されています - これは問題を示している可能性があります
インスタンス FB.init が呼び出されるのは一度だけなので、これは奇妙に思えます。事実上、私のスクリプトは、手動でスクリプト タグを html に追加する場合と同じですが、動的に実現しようとしています。
私が試したこと。ここで、javascript を使用して要素を追加および追加することに関する多くの質問を読みました。ほとんどすべての方法を試しました。Javascript を使用してスクリプトを動的に挿入するというタイトルのトピックを読みましたが、役に立ちませんでした。
私の方法は正しいようですが、それでもこれらの Facebook エラーが発生します。
私のマークアップ。
<!DOCTYPE html>
<head>
<title></title>
<head>
<body>
<script src="facebook.js"></script>
</body>
</html>
私のJavascript:
var Facebook = {};
Facebook = {
config: {
APP_ID: 'APP_ID',
APP_URL: 'APP_URL',
CHANNEL_URL: 'CHANNEL_URL'
}
};
var fbEl = document.createElement('div');
fbEl.id = 'fb-root';
document.body.insertBefore(fbEl,document.body.children[0]);
var fbScript = document.createElement('script');
fbScript.type = 'text/javascript';
fbScript.innerHTML = '';
fbScript.innerHTML += 'window.fbAsyncInit = function() {\n';
fbScript.innerHTML += 'FB.init({\n';
fbScript.innerHTML += 'appId : '+Facebook.APP_ID+',\n';
fbScript.innerHTML += 'channelUrl : '+Facebook.CHANNEL_URL+',\n';
fbScript.innerHTML += 'status : false,\n';
fbScript.innerHTML += 'cookie : true,\n';
fbScript.innerHTML += 'xfbml : false \n';
fbScript.innerHTML += '});\n';
fbScript.innerHTML += '};\n';
fbScript.innerHTML += '(function(d, debug){\n';
fbScript.innerHTML += 'var js, id = "facebook-jssdk", ref = d.getElementsByTagName("script")[0];\n';
fbScript.innerHTML += 'if (d.getElementById(id)) {return;}\n';
fbScript.innerHTML += 'js = d.createElement("script"); js.id = id; js.async = true;\n';
fbScript.innerHTML += 'js.src = "//connect.facebook.net/en_US/all" + (debug ? "/debug" : "") + ".js";\n';
fbScript.innerHTML += 'ref.parentNode.insertBefore(js, ref);\n';
fbScript.innerHTML += '}(document, /*debug*/ false));';
document.body.insertBefore(fbScript,document.body.children[1]);
コードに Facebook 変数が正しく設定されていますが、これはデモンストレーション用です。これについてFacebookのドキュメントを何度も読みました。
Javascriptのみを使用してtje FB JS SKDのブロックを動的に追加する方法はありますか?