我想达到什么目的。要创建一个加载 Facebook Javascript SDK 的模块,而不必将该脚本标记粘贴到您的 HTML 中并手动输入您的应用程序详细信息,是的,这似乎是在浪费时间,但对我来说似乎更有意义。例如,此模块将使用您的详细信息进行配置,并且可以通过 Javascript 设置所有内容,而不是将初始化代码放在 HTML 文件中,将其余逻辑放在脚本文件中。
我的问题。当我动态附加脚本和
<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 动态添加块?