权限被拒绝访问属性'Arbiter'
我有一个iframe FB应用程序。我们有三个地方开发它:我的本地主机,测试应用程序的舞台服务器,生产服务器。本地主机和生产都有HTTPS。本地主机和舞台应用已启用沙盒模式。所有版本的应用程序都是相同的,代码是相同的。除了HTTPS之外,舞台和制作完全相同的服务器机器具有相同的设置。权限被拒绝访问属性'Arbiter'
什么现在是只在我的舞台的服务器应用程序发生:Permission denied to access property 'Arbiter'
:当我点击一些地方jQuery UI的对话框应该召唤,它提出了在我的萤火虫以下错误。那么没有对话被召唤。它提出了在某种程度上动态加载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));
}
线if (p == parent || !p.Arbiter || !p.JSON) {
提高它。我连接JS API的脚本代码如下所示:
<script src="https://connect.facebook.net/en_US/all.js#appId=APPID"></script>
有没有人知道为什么会出现这种情况?我发现this和this,但这些问题似乎对我没有帮助(或者我只是不明白)。难道是因为HTTPS?为什么它前天工作?我很绝望:-(
每当你有一个权限被拒绝的消息,并且你正在处理frame或iframe时,这是一个文档域问题,一个文档属于域x,另一个域是域y。 domain.com和domain.com不是同一个文档域!
当您从另一个框架文档的DOM中点击(无论是为了更改页面元素的值还是仅仅是为了读取一些隐藏的变量或url等的值),你会得到一个权限被拒绝的消息,除非这两个框架文档是从相同的/相同的域中提供的
因此,如果一个框架属于www。 mydomain.com和其他碰巧只是mydomain.com或www.someotherdomain.com,你会得到血腥的权限拒绝错误。
而且没有办法绕过它。如果有的话,身份盗窃问题会立即飙升。
看来这真的是问题所在。但是,Facebook似乎也面临这个问题。我在这个答案中看到我的问题的解决方案http:// stackoverflow。com/a/7951175/325365 :-( – 2012-02-15 17:43:39
只需注意,只要它们位于同一个域中,就可以更改文档域。请参阅https://developer.mozilla.org/en-US/文档/网络/安全性/同-origin_policy – james 2014-06-20 11:13:22
Honza任何解决方案? – 2012-01-07 09:20:39
还没有。如果它是永久性的,或者它是某种Facebook平台的动荡,我们会等一会儿。 – 2012-01-07 13:51:32
有没有这个提交到Facebook的错误? – 2012-01-31 16:30:33