IE无法从YouTube API v2中获取XML?

时间:2014-03-10 14:45:03

标签: javascript internet-explorer youtube-api cors

我一直在制作一个网页,该网页会接收特定YouTube频道即将推出的直播活动并将其格式化为日历,您可以在其中点击每个视频的链接以嵌入播放器。在Firefox和Chrome中它运行得很好,但IE甚至无法使用XMLHttpRequest从YouTube获取XML。它给了我错误SEC7118,并告诉我一些关于要求CORS的事情。

有什么想法吗?

修改

事实证明,MS凭借其辉煌的思维过程,认为XMLHttpRequest()对于CORS来说不够好,所以他们决定创建XDomainRequest(),然后使用它直到IE11,他们最终开始支持XMLHttpRequest()的CORS(意味着他们在响应头中确认了Access-Control-Allow-Origin)。

不幸的是,就我此时的测试而言,XDomainRequest(),在我目前的实现中,只适用于IE9和IE10,并且需要一些麻烦来使它成为XML DOM对象的可用状态。我怀疑它在IE8中不起作用,因为我是从file://(本地测试页)而不是http://测试的,这是API使用的。

我现在的代码是(简化):

function XMLCorsRequest(url){ 
  var xhr = new XMLHttpRequest();
  if ("withCredentials" in xhr){
    // Browsers with standard CORS support in XMLHttpRequest(), e.g. Chrome, Safari, Firefox, IE 11
    var xhr = new XMLHttpRequest();
    xhr.onload = function(){
      populateSchedule(xhr.responseXML);
    };
    xhr.open("GET",url,true);

  }
  else if (typeof XDomainRequest != "undefined"){
    // IE v <= 10
    xhr = new XDomainRequest();
    xhr.onload = function(){
      XDRParse(xhr.responseText);
    };
    xhr.open("GET",url);

  } else {
    // No CORS support at all
    return null;
  }
  xhr.send();
}

function XDRParse(rawXmlAsText) {
  var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM");
  xmlDoc.async = "false";
  xmlDoc.loadXML(rawXmlAsText);
  populateSchedule(xmlDoc);
}

加载请求后调用函数populateSchedule(),并创建XML DOM对象。它所做的只是获取即将发布的直播活动条目标签,然后对它们进行排序,创建一个包含视频ID(YouTube视频的v参数),开始时间,描述和状态的多维数组,以便它可以创建一个显示所有细节的表格。

我还注意到IE有几个问题:

它无法获取XML DOM对象节点的innerText值,因此它需要textContent才能在所有浏览器中工作(我已经测试过)。

正则表达式至少在时间上不起作用。将YouTube事件的开始日期(以UTC表示为日期和时间)转换为普通的Date对象后,我使用它来调用它toLocaleString()。然后我试图切掉表示秒数的最后:00(我不需要它们)。通常,匹配它的表达式应该只是/:\d\d(?=\s)/(没有替换);但因为IE是IE,它以某种方式使用“零”而不是0但是以某种方式“数字”,在每个实际字符之间创建未知字符,我无法检查后续字符,因此表达式变为{{1 (我只是用空格替换了它。)

Firefox也做了一些奇怪的事情。使用/:[^\d]*\d[^\d]*\d[^\s\d:]*\s/时,不是以toLocaleString()方式声明日期,而是返回一周中的整天,月份,月份后面的逗号,然后是年份,然后是时间好像是正常的(例如2014年3月27日星期四上午10点)。

这些不是我需要帮助的东西,但我认为有人在这可能会使用我的发现。

0 个答案:

没有答案