2012-01-18 64 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