我构建的 Facebook 页面选项卡存在问题。
该网站在 Chrome 和 Firefox 中运行良好,但是当我尝试在 IE 中做一些简单的事情时遇到了问题。
[基本 URL:http://domain.com/]
[请求 URL:http://domain.com/request]
我想要做的是在 REQ URL 上再次从我的服务器 BASE URL 向我的服务器发出一个简单的 ajax 请求,在 Chrome 或 Firefox 中,我得到了预期的结果,但我得到了一些错误和警告。
警告如下(不含敏感域信息)
SEC7118: XMLHttpRequest for https://www.facebook.com/dialog/oauth?client_id=APP_ID&redirect_uri=URL_ENCODED_REDIRECT_URI required Cross Origin Resource Sharing (CORS).
SEC7119: XMLHttpRequest for https://www.facebook.com/dialog/oauth?client_id=APP_ID&redirect_uri=URL_ENCODED_REDIRECT_URI required CORS preflight.
错误如下
SEC7120: Origin http://domain.com not found in Access-Control-Allow-Origin header.
SCRIPT7002: XMLHttpRequest: Network Error 0x80070005, Access is denied.
我对这些错误进行了大量研究,我知道它们与跨域控制有关,并且从一个域发出的请求与另一个域不匹配。奇怪的是,虽然我的两个域是相同的,所以 CORS 不应该适用。我无法弄清楚我错过了什么。我已经阅读了至少 20 篇关于堆栈溢出的文章,但没有一篇能够准确解决我的问题。
REQ_URL 中的 /request/ 是一个从控制器调用的方法,我只需要调用这个方法就可以了,它没有什么特别之处,它是一个简单的 PHP 函数。
function request() {
return 'you win!';
}
ajax 使用 jQuery 来发出请求,特别是 $.get 方法,这是我的代码:
$.get('/request', function(response){
console.log(response);
});
我没有得到回应。
我也尝试过使用 $.ajax 并调用完整的方法,我得到一个返回“错误”的文本状态类型,我希望这是上述错误的结果。
我已阅读并理解以下文章:
根据同源政策,我不应该绑定到 CORS,我的 get 请求应该可以正常工作,或者我错过了什么。
任何帮助表示赞赏。
['更新']
我已经确定上述错误仅在 facebook(Facebook 页面选项卡)内部时发生,这个“我认为”是 iframe 来自域“ http://static.ak.facebook.com/ ”和我的域“的结果http://domain.com " 这违反了同源策略规则。非常烦人,因为当进行 ajax 调用时,它们会从“ http://static.ak.facebook.com/ ”发送到“ http://domain.com ”,因为我遇到了跨域策略错误。
我仍然不知道如何解决这个问题。