访问属性的权限被拒绝'仲裁员'

Permission denied to access property 'Arbiter'

本文关键字:仲裁员 拒绝 属性 权限 访问      更新时间:2023-09-26

我有一个iframe FB应用程序。我们有三个地方可以开发它:我的本地主机、测试应用程序的后台服务器和生产服务器。本地主机和生产具有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));
}

if (p == parent || !p.Arbiter || !p.JSON) {行提出了它。我链接JS API的脚本代码如下:

<script src="https://connect.facebook.net/en_US/all.js#appId=APPID"></script>

有人知道为什么会发生这种事吗?我发现了这个和这个,但这些问题似乎对我没有帮助(或者我就是不明白)。可能是因为HTTPS吗?为什么它前天起作用?我绝望了:-(

当您收到拒绝权限的消息并且正在处理框架或iframe时,这就是文档域问题。一个文档属于域x,另一个属于域y。请注意,www.domain.com和domain.com不是同一个文档域!

当您从另一个框架文档访问一个框架的DOM时(无论是为了更改页面元素的值,还是仅仅读取某个隐藏变量或url的值等),您都会收到一条拒绝权限的消息,除非两个框架文档都来自相同/相同的域。

因此,如果一个框架属于www.mydomain.com,而另一个恰好只是mydomain.com或www.someotherdomain.com,则会出现被拒绝权限的错误。

这是没有办法的。如果真的有,身份盗窃问题很快就会飙升。