在Facebook上使用安全浏览时,不安全的JavaScript试图访问帧

在Facebook上使用安全浏览时,不安全的JavaScript试图访问帧,javascript,xss,frame,unsafe,facebook-javascript-sdk,Javascript,Xss,Frame,Unsafe,Facebook Javascript Sdk,我上周发布了一个应用程序,并注意到在Chrome中,只有画布的高度并不总是调整的。我花了好几个小时研究这些问题,发现有时会出现以下错误 。 域、协议和端口必须匹配 现在,了解编程的一两件事后,我推断这可能是由于https和http可以互换使用。我在Facebook上安全浏览“开”时(有时)会出错,而在“关”时则不会出错 但我发现真正奇怪的是,在HTTPS上浏览时偶尔会出现这个问题。我仍然没有找到任何解决问题的模式,也没有发现我的代码按预期工作。我知道这里有一些关于这个话题的帖子,我也尝试过一些解

我上周发布了一个应用程序,并注意到在Chrome中,只有画布的高度并不总是调整的。我花了好几个小时研究这些问题,发现有时会出现以下错误

。 域、协议和端口必须匹配

现在,了解编程的一两件事后,我推断这可能是由于
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";