В доступе отказано в праве собственности "Арбитр" - PullRequest
4 голосов
/ 06 января 2012

У меня есть приложение iframe FB.У нас есть три места, где мы его разрабатываем: мой локальный сервер, сервер этапа, на котором мы тестируем приложение, рабочий сервер.Localhost и производство имеют HTTPS.Локальный и сценический приложения имеют режим песочницы.Все версии приложения идентичны, код один и тот же.Этап и производство - это полностью одна и та же серверная машина с теми же настройками, кроме 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?Почему это сработало позавчера?Я в отчаянии: - (

1 Ответ

7 голосов
/ 13 февраля 2012

всякий раз, когда у вас есть сообщение об отказе в разрешении и вы имеете дело с фреймами или фреймами, это проблема домена документа.Один документ принадлежит домену x, а другой - домену y.И обратите внимание, что www.domain.com и domain.com не являются одинаковыми доменами документов!

Когда вы подключаетесь к DOM одного документа в рамке из другого (будь то с целью изменения значений элемента страницы или просто чтения значений некоторой скрытой переменной или URL-адреса и т. Д.),вы получите сообщение об отказе в разрешении, если оба документа в рамке не будут предоставлены с одного и того же / идентичного домена.

Таким образом, если один фрейм принадлежит www.mydomain.com, а другой - просто mydomain.com или www.someotherdomain.com, вы получите эту кровавую ошибку отказа в разрешении.

И пути назад нет.И если бы это было так, проблема кражи личных данных быстро взлетела бы до небес.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...