4

Я получаю неограниченное количество этого сообщения (например, в цикле) и он ломает веб-сайтеЗаблокирован кадр с источником «https://www.facebook.com» от доступа к кадру с источником «http://myapp.herokuapp.com»

Rails 4.0.0 (с Turbolinks)

сообщение

Ошибка Blocked кадр с началом "https://www.facebook.com" от доступа кадр с началом "http://app.herokuapp.com". Кадр с запросом доступа имеет протокол «https», к кадру, к которому обращаются, имеет протокол «http». Протоколы должны совпадать.

Facebook.js.coffee

fb_root = null 
fb_events_bound = false 

$ -> 
    loadFacebookSDK() 
    bindFacebookEvents() unless fb_events_bound 

bindFacebookEvents = -> 
    $(document) 
    .on('page:fetch', saveFacebookRoot) 
    .on('page:change', restoreFacebookRoot) 
    .on('page:load', -> 
     FB?.XFBML.parse() 
    ) 
    fb_events_bound = true 

saveFacebookRoot = -> 
    fb_root = $('#fb-root').detach() 

restoreFacebookRoot = -> 
    if $('#fb-root').length > 0 
    $('#fb-root').replaceWith fb_root 
    else 
    $('body').append fb_root 

loadFacebookSDK = -> 
    window.fbAsyncInit = initializeFacebookSDK 
    $.getScript("//connect.facebook.net/it_IT/all.js") 

initializeFacebookSDK = -> 
    FB.init 
    channelUrl : 'http://app.heroku.com/page/fbchannel' 
    appId  : 'MY_ID_HERE' 
    status  : true 
    cookie  : true 
    xfbml  : true 

PageController

class PageController < ApplicationController 
skip_before_action :authenticate_user! 

def fbchannel 
    cache_expire = 1.year 
    response.headers["Pragma"] = "public" 
    response.headers["Cache-Control"] = "max-age=#{cache_expire.to_i}" 
    response.headers["Expires"] = (Time.now + cache_expire).strftime("%d %m %Y %H:%I:%S %Z") 
    render :layout => false, :inline => "<script src='//connect.facebook.net/it_IT/all.js'></script>" 
    end 
end 

FBlike (хелпер)

def fblike(resource, layout = 'standard') 

     content_tag(:div, "", class:"fb-like", data: { 
      href: polymorphic_url(resource), 
      width: "225", 
      show_faces: false, 
      stream: false, 
      show_border: false, 
      header: false, 
      layout: layout 

      } 
     ) 
    end 
+2

URL вашего канала должен иметь тот же протокол, что и тот, который используется Facebook: вы пробовали использовать https: // app.heroku.com/page/fbchannel для вашего channelUrl? – CamilleLDN

ответ

0

Довольно старый вопрос, но он все еще открыт. Так что, если вы уже не видели этого ответа, Mademoiselle Geek находится на месте. Быстрая двойная проверка моего приложения heroku подтверждает, что на самом деле вы можете просто набирать https: вместо http: и он будет автоматически принимать SSL-соединение - не требуется настройка. Единственное, что вы должны установить в вашем Facebook.js.coffee- этом разделе ..

initializeFacebookSDK = -> 
    FB.init 
    channelUrl : 'http://app.heroku.com/page/fbchannel' 

Изменение к ..

initializeFacebookSDK = -> 
    FB.init 
    channelUrl : 'https://app.heroku.com/page/fbchannel' 

Затем, в зависимости от вашей операционной системы (я использую linux), выполните быстрый поиск grep (или найдите текст файлов в каталоге) для http://app.heroku и измените его на https, чтобы быть в безопасности.