2013-02-13 112 views
1

這裏是我的情況:我有一個Javascript插件,當點擊時在啓動它的第三方網站上彈出一個彈出窗口。 popop然後顯示一個IFRAME,其中我使用Facebook作爲登錄方法。不安全的JavaScript嘗試訪問框架...協議必須匹配

當彈出啓動時,它最近開始給了一個錯誤:

Unsafe JavaScript attempt to access frame with URL http://{THIRD-PARTY-SITE-GOES-HERE} from frame with URL https://s-static.ak.facebook.com/connect/xd_arbiter.php?version=18#channel= …%3Dtabmodule%26utm_term%3D200000%26fb_xd_fragment%23xd_sig%3Df2ade8e518%26.

The frame requesting access has a protocol of 'https', the frame being accessed has a protocol of 'http'. Protocols must match.

的IFRAME本身是HTTPS和用於正常工作。我不確定Chrome爲什麼要訪問父頁面。我無法控制父頁面,所以我不能讓它們成爲https。

這裏是我的FB初始化代碼從IFRAME內:

window.fbAsyncInit = function() 
    { 
     FB.init({ 
      appId: '{myappid}', 
      status: true, 
      cookie: true, 
      xfbml: true, 
      oauth: true, 
      channelURL : 'https://degree3.com/channel.php' 
     }); 

     FB.getLoginStatus(function(response) 
     { 
      if (resp = response.authResponse) 
      { 
       $('#fb_button').attr("onclick", "signinViaFacebook(response.authResponse.userID, response.authResponse.accessToken);").show(); 
      } 
     }); 
    }; 
    (function() 
    { 
     var e = document.createElement('script'); e.async = true; 
     e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js'; 
     document.getElementById('fb-root').appendChild(e); 
    }()); 

任何想法如何,我可以修復這個錯誤?

+0

_「IFRAME本身在https上_」 - 錯誤消息似乎表明否則。 – CBroe 2013-02-13 00:21:57

+0

@CBroe對不起,如果我不是更清楚:由於某種原因的錯誤信息是指父頁(第三方網站去這裏),而不是IFRAME本身。 iframe由我控制,並位於https上。 – Wemmick 2013-02-13 04:40:40

+0

關於欺騙:[不安全的JavaScript嘗試訪問URL的框架](http://stackoverflow.com/q/4324108/1456376):看起來沒有關係到我。他們所有的網頁都在同一個域名上,而Facebook沒有涉及。 [不安全的JavaScript嘗試訪問帶有URL的框架...「錯誤在Chrome Webkit檢查器中不斷生成](http://stackoverflow.com/questions/3010170/unsafe-javascript-attempt-to-access-frame-with-url-error - 持續):也不完全一樣:我的錯誤不是連續的,它阻止了Facebook JS SDK的正常操作。 – Wemmick 2013-02-13 04:44:54

回答

0

你不能在iframe中使用facebook登錄,它永遠不會工作。甚至不打擾我花了幾個令人沮喪的時間試圖做同樣的事情。即使你現在解決了https問題,你也會面對一個X-Frame Options錯誤,因爲在fa​​cebook響應頭中設置了一個選項,該選項只接受來自同一來源(即facebook)的請求。

我基本上想說的是,出於安全原因,Facebook無法在iframe中啓動。在目前的困境中最好的辦法是打開另一個帶有Facebook登錄的彈出窗口。 Iframe根本行不通。我知道它不會看起來很優雅,但它是唯一的出路,或者您將彈出窗口本身重定向到臉書並使用回調機制重新導向到您的插件。

希望它有幫助。

+0

是的,我沒有在iframe中進行實際的登錄 - 當我在登錄步驟之前加載帶有如下所示的Facebook init JS的iframe時會窒息。正如你所描述的那樣,我在彈出窗口中進行登錄。 – Wemmick 2013-02-13 19:20:57

+0

許多網站從iframe,www.mygamification.com登錄Facebook。也許你不認爲這些iframe是獨立的域(注入JavaScript插件),沒有連接到原始網頁,所以登錄只在iframe本身內有效。我也在研究相同的功能,我看到這個錯誤,但它並不妨礙我登錄到fb。 – Minja 2013-03-30 09:18:03

相關問題