我使用以下代码将Facebook javascript sdk加载到我的页面中: -
(function() {
console.log('Hello World! From self executing function.');
var e = document.createElement('script');
e.async = true;
e.type = 'text/javascript';
e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
document.getElementById('fb-root').appendChild(e);
console.log('javascript sdk is appended into the fb-root element of the page.');
}());
它正在正确加载,但我在控制台中收到以下错误: -
Error: Permission denied to access property 'toString'
[Break On This Error]
...5(i(ca.getElementsByTagName('*')),'forEach',true,function(ka){if(!ea&&ka.getAttr...
如何解决这个问题?
谢天谢地收到任何帮助?
答案 0 :(得分:4)
Facebook javascript SDK通常会导致跨浏览器问题。为了解决这个问题,facebook本身已经集成了一个方法,即在FB.init()函数中添加一个通道url。
window.fbAsyncInit = function() {
// init the FB JS SDK
FB.init({
appId : 'YOUR_APP_ID', // App ID from the App Dashboard
channelUrl : '//WWW.YOUR_DOMAIN.COM/channel.html', // Channel File for x-domain communication
status : true, // check the login status upon init?
cookie : true, // set sessions cookies to allow your server to access the session?
xfbml : true // parse XFBML tags on this page?
});
// Additional initialization code such as adding Event Listeners goes here
};
添加频道文件可解决跨浏览器问题。
channel.html文件的内容应该只有一行:
<script src="//connect.facebook.net/en_US/all.js"></script>
FB.init()中的channelUrl参数是可选的,但强烈建议使用。提供频道文件有助于解决三个特定的已知问题。
channelUrl必须是与您包含SDK的网页相匹配的完全限定网址。换句话说,如果您的网站使用www提供,则频道文件域必须包含www,如果您在网页上修改document.domain,则必须在channel.html文件中进行相同的document.domain更改。