Hon*_*rek 4 javascript facebook
我有一个iframe FB应用程序.我们有三个地方开发它:我的localhost,我们测试应用程序的舞台服务器,生产服务器.Localhost和生产都有HTTPS.Localhost和stage应用程序启用了沙箱模式.所有版本的应用程序都是相同的,代码是相同的.除HTTPS之外,舞台和制作完全相同,具有相同的设置.
现在只在我的舞台服务器应用程序中发生了什么:当我点击应该召唤jQuery UI对话框的东西时,它会在我的Firebug中引发跟随错误:Permission denied to access property 'Arbiter'.然后没有召唤对话.它以某种方式动态加载canvas_proxy.php,在此代码中:
/**
* Parses the fragment and calls Arbiter.inform(method, params)
*
* @author ptarjan
*/
function doFragmentSend() {
var
location = window.location.toString(),
fragment = location.substr(location.indexOf('#') + 1),
params = {},
parts = fragment.split('&'),
i,
pair;
lowerPageDomain();
for (i=0; i<parts.length; i++) {
pair = parts[i].split('=', 2);
params[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);
}
var p = params.relation ? resolveRelation(params.relation) : parent.parent;
// The user is not inside a frame (probably testing on their own domain)
if (p == parent || !p.Arbiter || !p.JSON) {
return;
}
p.Arbiter.inform(
'Connect.Unsafe.'+params.method,
p.JSON.parse(params.params),
getBehavior(p, params.behavior));
}
Run Code Online (Sandbox Code Playgroud)
这条线if (p == parent || !p.Arbiter || !p.JSON) {引起了它.我链接JS API的脚本代码如下所示:
<script src="https://connect.facebook.net/en_US/all.js#appId=APPID"></script>
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么会发生这种情况?我发现了这个和这个,但这些问题似乎对我没有帮助(或者我只是没有得到它).可能是因为HTTPS?为什么它前天工作?我很绝望 :-(
每当您有权限被拒绝的消息并且您正在处理框架或iframe时,它就是文档域问题.一个文档属于域x,另一个文档属于域y.请注意,www.domain.com和domain.com不是同一个文档域!
当您从另一个文档中获取一个框架文档的DOM时(无论是为了更改页面元素的值还是仅仅读取某些隐藏变量或URL的值等),您将获得权限被拒绝除非两个框架文档都是从相同/相同的域提供的.
因此,如果一个框架属于www.mydomain.com而另一个框架恰好只是mydomain.com或www.someotherdomain.com,那么您将获得该血腥权限拒绝错误.
并没有办法解决它.如果有的话,身份盗窃问题很快就会飙升.