在Facebook上使用安全浏览时,不安全的JavaScript试图访问帧
我上周发布了一个应用程序,并注意到在Chrome中,只有画布的高度并不总是调整的。我花了好几个小时研究这些问题,发现有时会出现以下错误 。 域、协议和端口必须匹配 现在,了解编程的一两件事后,我推断这可能是由于在Facebook上使用安全浏览时,不安全的JavaScript试图访问帧,javascript,xss,frame,unsafe,facebook-javascript-sdk,Javascript,Xss,Frame,Unsafe,Facebook Javascript Sdk,我上周发布了一个应用程序,并注意到在Chrome中,只有画布的高度并不总是调整的。我花了好几个小时研究这些问题,发现有时会出现以下错误 。 域、协议和端口必须匹配 现在,了解编程的一两件事后,我推断这可能是由于https和http可以互换使用。我在Facebook上安全浏览“开”时(有时)会出错,而在“关”时则不会出错 但我发现真正奇怪的是,在HTTPS上浏览时偶尔会出现这个问题。我仍然没有找到任何解决问题的模式,也没有发现我的代码按预期工作。我知道这里有一些关于这个话题的帖子,我也尝试过一些解
https
和http
可以互换使用。我在Facebook上安全浏览“开”时(有时)会出错,而在“关”时则不会出错
但我发现真正奇怪的是,在HTTPS上浏览时偶尔会出现这个问题。我仍然没有找到任何解决问题的模式,也没有发现我的代码按预期工作。我知道这里有一些关于这个话题的帖子,我也尝试过一些解决方法,但是没有一个能解决我的问题。这是我的部分代码-
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : '<myid>', // App ID
channelUrl : '//tabletr.herokuapp.com/channel.php', // Channel File
status : false, // Check login status
cookie : true, // Enable cookies to allow the server to access the session
xfbml : false // Parse XFBML
});
// Additional initialization code here
FB.Canvas.setSize({ height: 1200 });
};
// If I comment out this function I don't get any unsafe URL errors
// anymore. I'm guessing that the include of the JavaScript code either
// fails to use the right protocol or is faulty in its implementation
// by Facebook. My money is on the former.
(function(d){
var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
//js.src = "//connect.facebook.net/en_US/all.js";
js.src = "//tabletr.herokuapp.com/js/all.js";
d.getElementsByTagName('head')[0].appendChild(js);
}(document));
</script>
window.fbAsyninit=函数(){
FB.init({
appId:“”,//应用ID
channelUrl:'//tabletr.herokuapp.com/channel.php',//通道文件
状态:false,//检查登录状态
cookie:true,//启用cookie以允许服务器访问会话
xfbml:false//解析xfbml
});
//这里有额外的初始化代码
FB.Canvas.setSize({height:1200});
};
//如果我注释掉这个函数,我不会得到任何不安全的URL错误
//再也没有了。我猜JavaScript代码的包含
//未能使用正确的协议或其实现有故障
//通过Facebook。我的钱在前者身上。
(职能(d){
var js,id='facebook jssdk';if(d.getElementById(id)){return;}
js=d.createElement('script');js.id=id;js.async=true;
//js.src=“//connect.facebook.net/en_US/all.js”;
js.src=“//tabletr.herokuapp.com/js/all.js”;
d、 getElementsByTagName('head')[0].appendChild(js);
}(文件);
我该如何解决这个问题?老实说,我没钱了。也许我的通道文件实现是错误的
更新代码
window.fbAsyninit=函数(){
FB.init({
appId:“”,//应用ID
channelUrl:'//tabletr.herokuapp.com/channel.php',//通道文件
状态:false,//检查登录状态
cookie:true,//启用cookie以允许服务器访问会话
xfbml:false//解析xfbml
});
//这里有额外的初始化代码
FB.Canvas.setSize({height:1200});
};
//如果我注释掉这个函数,我不会得到任何不安全的URL错误
//再也没有了。我猜JavaScript代码的包含
//未能使用正确的协议或其实现有故障
//通过Facebook。我的钱在前者身上。
(职能(d){
var js,id='facebook jssdk';if(d.getElementById(id)){return;}
js=d.createElement('script');js.id=id;js.async=true;
js.src=“//connect.facebook.net/en_US/all.js”;
//js.src=“//tabletr.herokuapp.com/js/all.js”;
d、 getElementsByTagName('head')[0].appendChild(js);
}(文件);
我已经根据堆栈溢出问题更新了代码-但是,这还没有解决这个问题。我在2012-01-19中看到了下面的bug报告,它显示了我面临的相同症状。祈求好运,Facebook很快就会解决这个问题
完全可能
您的错误消息声明:
域、协议和端口必须匹配
您正在访问包含脚本的帧
从带有URL的框架
所以这看起来确实像是http/https不匹配。我不认为这会扩展到子域,但这可能会有问题
但这是您的代码还是框架的?基本上,您需要确保这两个协议在安全或常规浏览场景中匹配。完全可能
//js.src = "//connect.facebook.net/en_US/all.js";
js.src = "//tabletr.herokuapp.com/js/all.js";
您的错误消息声明:
域、协议和端口必须匹配
您正在访问包含脚本的帧
从带有URL的框架
所以这看起来确实像是http/https不匹配。我不认为这会扩展到子域,但这可能会有问题
但这是您的代码还是框架的?基本上,您需要确保这两个协议在安全或常规浏览场景中匹配
//js.src = "//connect.facebook.net/en_US/all.js";
js.src = "//tabletr.herokuapp.com/js/all.js";
看起来您复制了http://connect.facebook.net/en_US/all.js
作为本地服务器
https://tabletr.herokuapp.com/js/all.js
http://connect.facebook.net/en_US/all.js
和https://connect.facebook.net/en_US/all.js
显示了几个分别以“http”和“https”硬编码的URL。如果你想在本地复制,你必须像Facebook一样拥有两个独立的版本
但我建议只指向Facebook的官方脚本,这样你就不必一直同步它了
看起来您复制了http://connect.facebook.net/en_US/all.js
作为本地服务器
https://tabletr.herokuapp.com/js/all.js
http://connect.facebook.net/en_US/all.js
和https://connect.facebook.net/en_US/all.js
显示了几个分别以“http”和“https”硬编码的URL。如果你想在本地复制,你必须像Facebook一样拥有两个独立的版本
但是我建议您只需指向Facebook的官方脚本,这样您就不必一直同步它。Facebook已经承认这是一个bug,并指派给了一名工程师。你可以在Facebook上跟踪进度,Facebook已经确认这是一个bug并指派给了一名工程师。您可以跟踪进度
//js.src = "//connect.facebook.net/en_US/all.js";
js.src = "//tabletr.herokuapp.com/js/all.js";