나는 페이스 북 SDK 초기화 페이스 북에서 개인 정보를 사용하기 위해, 나는 다트 코드Dart에서 Facebook SDK를 사용하는 방법?
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"]);
}
}
에서 이러한 방법을 사용하지만, 초기화 오류와 함께 실패에서
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));
이 코드를 사용하고 Uncaught InvalidCharacterError: The string contains invalid characters.
페이스 북 SDK에 대해 자세히 알아보기 나는 그 오류의 이유를 발견했습니다. 보내는 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;
}
document.createElement
다트의 domCreateElement
함수를 사용하여이
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;
};
지금까지의 기능을 hasNamePropertyBug
가하는, 요소를 래핑하는 경우 hasBug
변수는와 동일하게됩니다.은 GeneratedWrapper
래퍼와 요소를 비교하기 때문에 발생합니다.
그래서, hasNamePropertyBug
반환 true
이 코드는 내 질문에 다트 환경에서 페이스 북 SDK를 사용하는 방법이다, 그래서 오류를
document.createElement('<iframe name="' + name + '"/>');
을 던져?
가장 우아한 해결책은 아니지만'hasBug'는 전역 적으로 보입니다 - FB 재료를 사용하기 전에'true'로 설정하는 것은 어떨까요? 이름 속성 버그는 IE7 이하에만 적용되어야하며, 어쨌든 Dart는이를 지원하지 않습니다. 기존 브라우저를 수용 할 필요가 없다면이 방법이 유용 할 수 있습니다. – MarioP
@MarioP는 http://connect.facebook.net/en_US/all/debug.js에서'hasBug'는 동적으로 생성되는'hasNamePropertyBug' 함수의 지역 변수입니다. 'hasNamePropertyBug' 함수 전체를 오버라이드하는 것이 더 쉬운 것처럼 보입니다. 그러나 가능하지는 않습니다. –
어쩌면 제가 누락되었지만, 여전히 전역 객체에 정의 된 것처럼 보입니다. 'var hasBug;', 빈 행 바로 위에있는 함수와'test()'함수의 정의. – MarioP