2012-01-18 70 views
1

我目前正在開發一個Facebook應用程序(這不是我的第一個),我遇到了一些問題或很多問題。Facebook身份驗證對話框(JS)沒有顯示在IE和Chrome

index.php文件包含基於$ _GET ['page']變量的內容。 (例如'step1','step2')。

在'step2'上,有一個上傳視頻的窗體。該字段有一個onChange()事件,它觸發了這段代碼:

function submitForm() { 
    console.log('submitting...'); 
    FB.login(function(response) { 
    if (response.authResponse) { 
    console.log('Welcome! Fetching your information.... '); 
    FB.api('/me', function(response) { 
    console.log('Good to see you, ' + response.name + '.'); 
    jQuery('#fuserid').val(response.id); 

    jQuery('#uploadForm').submit(); 
    jQuery('.formContent').hide(); 
    jQuery('.loader').show(); 
    }); 
    } else { 
    console.log('User cancelled login or did not fully authorize.'); 
    window.location = "index.php?page=contest&error=not_authenticated&signed_request=" + "<?php echo $_REQUEST['signed_request']; ?>" 
    } 
    }, {scope: 'email,user_birthday,publish_stream,user_likes'}); 
} 

在Firefox中,它的工作原理與它應該完全相同。 在任何Internet Explorer版本中,Facebook驗證彈出窗口不會打開,也不會提交表單或任何內容。 除了開發人員工具[來自IE的開發人員工具]被激活並打開時 - 在這種情況下,所有工作都在IE中運行。

Chrome是simliar,有時會彈出是不開放的,我得到了以下錯誤消息:

> Unsafe JavaScript attempt to access frame with URL 
> https://www.facebook.com/dialog/permissions.request from frame with 
> URL 
> http://mydomain.at/myapp/index.php?page=contest&signed_request=XXXX 

我做了一些研究,並研究告訴我,$ channelUrl應該可以解決這個問題。 下面是從我fb.init代碼:

<div id="fb-root"></div> 
<script> 
(function(d, s, id) { 
    var js, fjs = d.getElementsByTagName(s)[0]; 
    if (d.getElementById(id)) return; 
    js = d.createElement(s); js.id = id; 
    js.src = "//connect.facebook.net/de_DE/all.js#xfbml=1&appId=<?php echo $appID; ?>"; 
    fjs.parentNode.insertBefore(js, fjs); 
}(document, 'script', 'facebook-jssdk')); 
</script> 
<script type="text/javascript"> 
    window.fbAsyncInit = function() { 
    FB.init({ 
     appId  : '<?php echo $appID; ?>', // App ID 
     channelUrl : 'http://mydomain.at/myapp/channel.html', // Channel File 
     status  : true, // check login status 
     cookie  : true, // enable cookies to allow the server to access the session 
     oauth  : true, // enable OAuth 2.0 
     xfbml  : true // parse XFBML 
    }); 

    // Additional initialization code here 
    window.setTimeout(function() { 
     FB.Canvas.setAutoResize(); 
    }, 150); 
    }; 
</script> 

爲什麼不工作在IE這個身份認證,彈出,並在Chrome只是有時工作? 爲什麼開發人員工具會改變IE的行爲以至於一切正常?

回答

1

對於IE,問題可能在於「console.log(...)」:console.log僅在開發人員工具打開時可用。您應該將其註釋掉,或使用回退功能進行日誌記錄。

+0

嘿,非常感謝你...這解決了我的問題,即... console.log:/ 現在我測試了它在Safari(Windows)PopUp沒有出現在Safari ..爲什麼? – RKAN07 2012-01-19 09:50:25

+0

如果我使用onclick事件,它也可以在safari中使用,但是我需要使用onchange(檢查權限ob文件選擇)事件:) – RKAN07 2012-01-19 10:30:39