gpt4 book ai didi

javascript - 如何在 Dart 中使用 Facebook SDK?

转载 作者:行者123 更新时间:2023-12-04 01:31:23 24 4
gpt4 key购买 nike

我正在使用这段代码进行 Facebook SDK 初始化

window.fbAsyncInit = function() {
FB.init({
appId : '{app id}',
status : true,
cookie : true,
xfbml : true
});
};

(function(d){
var js,
id = 'facebook-jssdk',
ref = d.getElementsByTagName('script')[0];
if (d.getElementById(id)) {
return;
}
js = d.createElement('script');
js.id = id;
js.async = true;
js.src = "//connect.facebook.net/en_US/all/debug.js";
ref.parentNode.insertBefore(js, ref);
}(document));

为了使用来自 Facebook 的个人数据,我在 Dart 代码中使用了这些方法

void showFacebook(Event e, var detail, Node target) {
JsObject fb = context["FB"];
fb.callMethod("getLoginStatus", [checkLoginStatusCallback]);
}

void checkLoginStatusCallback(response) {
print("checkLoginStatusCallback");
if(response["status"] == "connected") {
showPhoto(response["authResponse"]["userID"]);
}
else {
authUser();
}
}

void authUser() {
print("authUser");
JsObject fb = context["FB"];
fb.callMethod("login", [loginCallback]);
}

void loginCallback (response) {
print("loginCallback");
if(response["authResponse"]) {
showPhoto(response["authResponse"]["userID"]);
}
}

但是初始化失败并出现错误 Uncaught InvalidCharacterError: The string contains invalid characters.

深入研究 Facebook SDK 我找到了该错误的原因。 Init 函数尝试创建用于发送 http 请求的 iframe

httpProxyFrame = createIframe({
url: httpDomain + proxyUrl,
name: 'fb_xdm_frame_http',
id: 'fb_xdm_frame_http',
root: container,
'aria-hidden':true,
title: IFRAME_TITLE,
'tab-index': -1
});

函数 createIframe 做这个检查

if (hasNamePropertyBug()) {
frame = document.createElement('<iframe name="' + name + '"/>');
} else {
frame = document.createElement("iframe");
frame.name = name;
}

函数 hasNamePropertyBug 做这个

function hasNamePropertyBug() {
return typeof hasBug === 'undefined'
? test()
: hasBug;
};

function test() {
var form = document.createElement("form"),
input = form.appendChild(document.createElement("input"));
input.name = guid();
hasBug = input !== form.elements[input.name];
form = input = null;
return hasBug;
};

document.createElement 使用 Dart 的 domCreateElement 函数而言,它包装了一个元素,hasBug 变量变得等于 true 因为它将 GeneratedWrapper 包装器与元素进行比较。

因此,hasNamePropertyBug 返回 true 并且此代码抛出错误

document.createElement('<iframe name="' + name + '"/>');

那么,我的问题是如何在 Dart 环境中使用 Facebook SDK?

最佳答案

根据您的代码片段,SDK 未被初始化。您将 window.fbAsyncInit 分配给初始化 SDK 的函数,但该函数从未被调用。

关于javascript - 如何在 Dart 中使用 Facebook SDK?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21137390/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com