我的页面上包含了Facebook的SDK,但似乎没有任何反应。
X.addScript("https://connect.facebook.net/en_US/sdk.js", true).then(() => {
FB.init({
appId: 'my-app-id',
cookie: true,
xfbml: true,
version: 'v3.0'
});
//FB.AppEvents.logPageView();
console.log("FB", FB);
FB.getLoginStatus(r => console.log(r));
}, e => console.error(e));
函数来源:
X.addScript = function (src, absolute = false) {
if (!absolute) {
src = SITE_URL + "/js/" + src + ".js?v=" + VERSION;
}
Array.from(document.head.children).forEach(child => {
if (child.nodeName === "SCRIPT" && child.src === src) {
return Promise.resolve();
}
});
return new Promise((resolve, reject) => {
document.head.appendChild(luri.construct({
node: "script",
src: src,
onload: resolve,
onerror: reject
}))
});
}
这是控制台
奇怪的是,我没有在网络标签中看到对facebook.net
的请求,但是添加了脚本标签并且显然定义了FB
,但是缺少诸如login
之类的功能,getLoginStatus
也永远不会回电(也许打给我吗?)
我可以确认页面的网址和在Facebook应用程序上设置的网址相同。
我也仅出于此目的而删除了FB.init
调用,并查看了SDK FB.getLoginStatus
的源代码,如果在init
之前调用它应该抛出一个错误,但不会不会发生,什么都不会记录。
密切关注我的调试器后,我发现加载的SDK的来源实际上是这样的:
FB={getLoginStatus:function(){},api:function(){},ui:function(){},Event:{subscribe:function(){}},UIServer:{},XFBML:{parse:function(){}},init:function(){},__noSuchMethod__:function(){}};
什么是f?