我正在使用Youtube API (https://developers.google.com/youtube/v3/?hl=en),特别是:播放列表,播放列表项和频道加载。
这在所有浏览器中都工作得很好,我们期望IE9和更低版本。这里我总是得到一个"No Transport"
错误。
<!Doctype html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Youtube API Test</title>
</head>
<body>
<code>
</code>
<script src="Scripts/jquery-2.1.4.js"></script>
<script>
$.ajax({
cache: false,
type: 'GET',
crossDomain: true,
url: 'https://www.googleapis.com/youtube/v3/playlistItems',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (data) {
$('code').text(JSON.stringify(data, null, 4));
},
error: function (err) {
$('code').text(JSON.stringify(err, null, 4));
}
});
</script>
</body>
</html>
(注意我删除了参数,在Chrome和FF这返回一个youtube错误,在IE一个"无传输"错误)。
我尝试使用xdomain
插件(https://github.com/jpillora/xdomain)
和XDomainRequest
插件(https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest#instructions)
在这里提示,没有成功。我有什么遗漏的吗,这个对其他人有用吗?
问题是,您无法从http站点向https服务进行ajax调用!!所有的例子都失败了:
- 请求必须针对与托管页面
相同的方案这个限制意味着如果您的AJAX页面在http://example.com,那么您的目标URL也必须以HTTP开头。同样,如果您的AJAX页面位于https://example.com,那么您的目标URL必须以HTTPS开头。
这绝对是我们的意图,以防止HTTPS页面制作基于http的资源的XDomainRequests,因为该场景呈现了一个许多开发人员和大多数用户都会遇到的混合内容安全威胁不懂。
然而,这个限制过于宽泛,因为它阻止了HTTP从发出xdomainrequest到HTTPS页面。虽然它的如果HTTP页面本身可能已被破坏,则没有理由是它应该被禁止接受公共资源安全。最糟糕的是,相同的方案限制意味着web开发人员使用file://scheme在本地测试它们的页面会发现这一点所有的XDomainRequests都被阻塞了,因为file://不匹配http://或https://,是唯一有效的目标方案(# 1)。为了解决这个问题,web开发人员必须托管他们的在本地web服务器(例如IIS, Visual Studio托管)上的页面服务器等).
来源:http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx
HTTPS与Visual Studio的内置ASP。. NET开发服务器:HTTPS与Visual Studio's内置的ASP。. NET开发服务器
JavaScript跨域调用:从HTTP到HTTPS的调用您是否尝试过使用gapi客户端库,它将自动发现youtube api描述并提供REST接口周围的包装器。
https://developers.google.com/api-client-library/javascript/该客户端库声明支持IE8+,并集成了一些智能代码以绕过浏览器限制。