使用iframe嵌入Youtube视频;不安全的JavaScript尝试&引用;

使用iframe嵌入Youtube视频;不安全的JavaScript尝试&引用;,javascript,iframe,youtube,youtube-iframe-api,Javascript,Iframe,Youtube,Youtube Iframe Api,我正在尝试使用以下代码嵌入YouTube视频: <iframe width="425" height="319" frameborder="0" wmode="Opaque"allowfullscreen="" src="http://www.youtube.com/embed/8vJwFvFi4ZY?wmode=transparent"> </i

我正在尝试使用以下代码嵌入YouTube视频:

<iframe width="425" height="319" frameborder="0" wmode="Opaque"allowfullscreen=""
      src="http://www.youtube.com/embed/8vJwFvFi4ZY?wmode=transparent">
</iframe>

虽然工作正常,但在控制台中会出现以下错误:

Chrome版本22.0.1229.94:

不安全的JavaScript试图使用URL访问帧
来自带有URL的框架。
域、协议和端口必须匹配

Firefox 17.0版:

错误:访问属性“toString”的权限被拒绝

我四处搜索,但我发现这可能是YouTube的问题,他们应该解决它

问题是:我如何才能消除这个错误?(通过任何方式,甚至通过抑制它。)

它是什么浏览器?
当我尝试在此页面中使用Firefox中的JavaScript添加iframe时,不会出现错误/警告。

将讨论从评论移至此答案。 简而言之,问题是不允许跨域JS对象访问,在您的情况下,youtube.com上的一个脚本正试图对父页面执行此操作


如果你只想显示youtube视频,你可以使用
标签来代替。

你无法阻止它,至少我知道这一点(我已经尝试了很多)。iframe目标中有一个脚本试图访问您的文档,可能正在寻找它可以调用的全局函数来启用API

另一件事是,即使使用他们自己的系统,错误仍然存在:

这没什么害处,你的视频会很好用的。但如果在控制台中运行,它看起来有点大胆。他们可能应该把它作为一个参数,起初我认为这是
origin
参数的想法,但这没有任何区别

同样值得注意的是,他们自己也会显示相同的错误(以及其他错误)。此外,如果使用
embed
标记而不是iframe,则不会显示任何错误

因此,您可以这样做以防止大多数桌面浏览器出现错误:

if(haveflash) {
    // use <embed>
} else {
    // use iframe
}
if(haveflash){
//使用
}否则{
//使用iframe
}
更新
大多数浏览器不再支持flash。不幸的是,这意味着使用
不再是可行的选择。

只需添加
?html5=1
即可防止此错误。(切换到HTML5播放器)

当您只能使用CSS时,为什么要使用Javascript?每次都能用。您甚至可以将任何视频合并到响应滑块中

或者只需访问:


.嵌入容器
{ 
位置:相对位置;
垫底:56.25%;
身高:0;
溢出:隐藏;
最大宽度:100%;
} 
.embed container iframe、.embed container object、.embed container embed
{ 
位置:绝对位置;
排名:0;
左:0;
宽度:100%;
身高:100%;
}

chrome和firefox,这不是一般的iframe问题,它与iframe中加载的Youtube页面有关,请尝试Youtube iframe&它会给出错误我附加的iframe的src与您的示例中相同。此外,iframe可以是不同的域。你能试试这段代码吗:
var-iframe=document.createElement('iframe');iframe.setAttribute('src','http://www.youtube.com/embed/8vJwFvFi4ZY?wmode=transparent'); document.body.appendChild(iframe)
并查看是否仍然出现错误?是的,它仍然会出现在firefox和chrome的控制台中,即使将代码放在只包含此代码或问题的iFrame的空html页面中,顺便说一句,我以前没有写过firefox的错误,因为它不像chrome的错误那样清晰,firefox的错误是:错误:访问属性“toString”的权限被拒绝“为什么你试图通过iframe而不是标签来实现这一点?这有点猜测,所以我不打算将其作为答案发布,但我怀疑youtube内容中的脚本试图查看iframe的参数,以获得wmode和allowfullscreen等参数。您的浏览器正确地将其视为跨站点脚本尝试,出于安全原因,这是不允许的。如果您将youtube所需的所有参数嵌入URL查询字符串中,则可能会阻止它这样做。同时,我也忍不住注意到,iframe中有wmode=不透明,URL中有wmode=transparent。我阅读了许多关于为什么会发生这种情况的观点,许多人说,这是因为iframe中加载的Youtube API试图访问违反安全标准的父元素,并且已经报告为错误,但我在这里更关心的是,如何阻止此错误出现在控制台中,而不仅仅是等待Youtube开发人员解决它。关于wmode,我没有注意到:),thanksMy建议(猜测)解决方案在我评论的最后一行-将youtube所需的所有参数嵌入URL查询字符串-必须值得一试。我尝试过,但仍然有错误谢谢,我知道它会起作用,但在我的例子中,改为的问题是:1-我正在处理的代码与其他领域结合在一起,需要更多的时间进行重构(我现在没有),2-最重要的是,我们仍然需要使用Iframe API来支持非flash浏览器Hanks David,我知道这不是对这个问题的直接回答,但在搜索了很多备选方案后,我得到了很多发现,你在回答中总结了这些发现,给出了迄今为止最合适的解决方案+1的“你不能阻止它”。这是绝对直接的回答,而不是在提示中写关于跨域安全etcThx的内容,但是它与这个问题有什么关系呢!!:)首先,我没有使用javascript加载视频,我只是使用了iframe,就像你一样,但是错误是从iframe中加载的代码中显示出来的,而不是我的
<style>
.embed-container 
{ 
position: relative; 
padding-bottom: 56.25%; 
height: 0; 
overflow: hidden; 
max-width: 100%; 
} 

.embed-container iframe, .embed-container object, .embed-container embed 
{ 
position: absolute; 
top: 0; 
left: 0; 
width: 100%; 
height: 100%; 
}
</style>

<div class='embed-container'>

<iframe src='https://www.youtube.com/watch?v=tntOCGkgt98' frameborder='0' allowfullscreen>
</iframe>
</div>