Проблема междоменного приемника FacebookSDK - PullRequest
2 голосов
/ 01 января 2011

Привет, может кто-нибудь помочь мне. Я не могу избавиться от этого сообщения об ошибке в Chrome 9.0 beta, Chrome 8.0 или Firefox 3.6.13:

"Небезопасная попытка JavaScript получить доступ к фрейму с URL 'http://apps.facebook.com/myapp/' из фрейма с URL' http://myapp.dyndns -office.com / '. Домены, протоколы и порты должны совпадать."

Я использую FacebookSDK версии 4.1.1 CSMvcFacebookApp в папке Samples.

У меня есть этот скрипт на моей странице Site.Master, расположенной в Views / Shared:


<script language="javascript" type="text/javascript">
    $(document).ready(function () {
        FB_RequireFeatures(['CanvasUtil'], function () {
            FB.XdComm.Server.init("<%= ResolveUrl("~/xd_receiver.htm") %>");
            FB.CanvasClient.startTimerToSizeToContent();
        });
    });
</script>

У меня есть xd_receiver.htm в моем корневом каталоге, и предполагается, что приведенный выше код javascript - это все, что мне нужно для проверки моего домена с помощью facebook. Правильно ли мое предположение или все изменилось? Я даже пытался переместить код FB из функции готовности JQuery так:


<script language="javascript" type="text/javascript">
    FB_RequireFeatures(['CanvasUtil'], function () {
        FB.XdComm.Server.init("<%= ResolveUrl("~/xd_receiver.htm") %>");
        FB.CanvasClient.startTimerToSizeToContent();
    });
</script>

Но это тоже не работает ... Кто-нибудь может пролить свет на то, что я делаю неправильно или как заставить xd файл работать, используя решение IFrame SDK / MVC ...

FB.CanvasClient.startTimerToSizeToContent () запускается, потому что в моем приложении нет полос прокрутки, что доказывает, что функция FB_RequireFeatures работает. Но что касается того, выполняет ли FB.XdComm.Server.init свою часть, я просто не уверен, как мне пройти этот тест ???

Содержимое моего файла xd_receiver.html в моем корневом каталоге:


<!--<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>cross domain receiver page</title>
</head>
<body>
        <!--
                As described in: http://wiki.developers.facebook.com/index.php/Cross-domain_communication_channel
        -->
    <script src="http://static.ak.facebook.com/js/api_lib/v0.4/XdCommReceiver.js" type="text/javascript"></script>

</body>
</html>-->

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<body>
<script src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/XdCommReceiver.js" type="text/javascript"></script>
</body>
</html>

XdCommReceiver.js существует, так как я только что скопировал вставленный URL в браузер. Мои пути верны или у вас есть фейсбук и измените URL и т. Д.? *

Я понимаю, что моя главная проблема в том, что Safari не будет запускать мое приложение вообще, если я не разберусь с этим междоменным материалом.

Любая помощь здесь будет высоко ценится: - \

Спасибо Rob

<< ДОПОЛНИТЕЛЬНЫЙ КОММЕНТАРИЙ >>

Есть ли встроенный механизм в последней версии FacebookSDK v 4.1.1, чтобы этот междоменный материал просто работал? Думали ли разработчики SDK об этой проблеме? Или я только что рассказал о будущей функции ...: - \

Ответы [ 2 ]

3 голосов
/ 17 февраля 2011

Вот код, который вы должны иметь в файле канала междоменного скриптинга:

<html><body><script type="text/javascript" src="http://connect.facebook.net/en_US/all.js"></script></body></html>

Вот код для инициализации FB Javascript SDK. Поместите это в самый конец ваших HTML-файлов, подставив соответствующие значения и URL-адреса.

<script type="text/javascript" src="http://connect.facebook.net/en_US/all.js"></script><script type="text/javascript">FB.init({appId: '1234567890', status: true, cookie: true, xfbml: true,channelUrl: 'http://example.com/xss_channel.htm'});</script>

При желании, поместите это в файл web.config, где находится файл канала XSS. Это позволяет браузерам кэшировать файл на неопределенный срок, как рекомендовано Facebook.

  <?xml version="1.0" encoding="UTF-8"?>
  <configuration>
      <location path="xss_channel.htm">
          <system.webServer>
              <httpProtocol>
                  <customHeaders>
                      <add name="Expires" value="Tue, 01 Jan 2030 16:00:00 GMT" />
                  </customHeaders>
              </httpProtocol>
          </system.webServer>
      </location>
  </configuration>

И, наконец, если вы используете XFBML, поместите это определение пространства имен в <html>, чтобы XFBML работал в IE: xmlns:fb="http://www.facebook.com/2008/fbml"

0 голосов
/ 02 января 2011

Вы используете старый Javascript Facebook Connect. Facebook C # SDK не совместим со старым Javascript SDK. Вы должны использовать новый Facebook Javascript SDK (как было включено в пример). http://developers.facebook.com/docs/reference/javascript/

...