我正在使用Youtube API(https://developers.google.com/youtube/v3/?hl=en,尤其是:播放列表,playlistItem和要加载的频道。
此功能在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)
如建议here,但没有成功。我缺少的任何东西,对其他人有用吗?
问题是,您无法从http站点向https服务进行ajax调用!!避开我发现的所有示例失败:
- 请求必须针对与托管页面相同的方案
此限制意味着如果您的AJAX页面位于http://example.com,则目标URL也必须以HTTP开头。同样,如果您的AJAX页面位于https://example.com,则您的目标网址也必须以HTTPS开头。
这绝对是我们防止HTTPS页面生成的意图XDomainRequests为基于HTTP的资源,因为这种情况下许多开发人员和大多数用户都会遇到的混合内容安全威胁不明白。
但是,此限制过于广泛,因为它阻止了HTTP发出针对HTTPS页面的XDomainRequests页面。虽然是确实HTTP页面本身可能已被破坏,没有禁止接收公共资源的原因安全地。
最糟糕的是,相同方案限制意味着Web开发人员使用file://方案在本地测试其页面会发现由于file://不匹配,所有XDomainRequests均被阻止http://或https://,这是唯一有效的目标方案(第1点)。要变通解决此问题,Web开发人员必须托管他们的本地Web服务器上的页面(例如IIS,Visual Studio托管)服务器等)。
带有Visual Studio内置ASP.NET开发服务器的HTTPS:HTTPS with Visual Studio's built-in ASP.NET Development Server
您是否尝试过使用gapi客户端库,它将自动发现youtube api描述并在REST接口周围提供包装。
https://developers.google.com/api-client-library/javascript/
该客户端库说明了对IE8 +的支持,并集成了一些智能代码来解决浏览器的局限。。