2013-03-05 44 views
2

我已经托管了由Adobe captivate在Amazon S3生成的html5视频。当我使用浏览器访问它的工作正常。无法访问来自交叉桶的内容(CORS ENABLED)

工作URL:http://lmtestforhtmlfive.s3.amazonaws.com/html5version/test/Hello%20World/story_html5.html

但是,当我用IFRAME上述工作的视频,在另一个HTML页面,它不工作。

错误: “不安全的JavaScript尝试访问来自帧的网址为http://temptesttobedelete.s3.amazonaws.com/html5test.html的帧,网址为http://lmtestforhtmlfive.s3.amazonaws.com/html5version/test/Hello%20World/story_html5.html。域,协议和端口必须匹配。

不工作的网址:http://temptesttobedelete.s3.amazonaws.com/html5test.html

经过几年的研究,我有需要在S3桶启用CORS,添加以下CORS配置上lmtestforhtmlfive桶。

<CORSRule> 
<AllowedOrigin>*</AllowedOrigin> 
<AllowedMethod>GET</AllowedMethod> 
<AllowedHeader>*</AllowedHeader> 
<MaxAgeSeconds>3000</MaxAgeSeconds> 
</CORSRule> 

但我仍然无法访问iframe中的html5视频。

请建议我如何访问IFRAME中的html5视频。

感谢, Laxmilal Menaria

回答

1

你的问题是你storyline_compiled.js文件中的代码是attemping尽管从不同的域加载来访问它在加载的IFRAME的父页面的DOM,具体有以下行:

if(self!=top){var meta=$('<meta name="viewport" id="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>');top.document.getElementsByTagName("head")[0].appendChild(meta.get(0))} 

更具体地,有问题的JS调用是:

top.document.getElementsByTagName 

这个问题是由于从另一个域加载的JS试图修改其嵌入的页面,这违反了大多数浏览器的XSS保护特性。

您拥有的一个选择是从JS文件本身删除该行代码,然后将其试图创建的标记添加到嵌入IFRAME的页面的头部。即只需将以下内容添加到您的html5test.html文件中:

<meta name="viewport" id="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>