Youtube嵌入:不安全的JavaScript尝试访问框架

Geo*_*old 55 javascript youtube iframe wicket

我们有一个Wicket应用程序,其中包含一个包含嵌入式Youtube视频的页面.视频嵌入并播放正常,但显然它会导致页面的其余部分无法呈现 - 看起来嵌入的DOM元素似乎不会显示在页面上,尽管它在标记中.

查看Chrome中的错误控制台会显示:

不安全的JavaScript尝试使用网址http://yample.com/detail/COMMUNICATION/search/com-sonyericsson-hanashi 从URL http://www.youtube.com/embed/eJY7_De5opI?enablejsapi=1&autohide=1&showinfo访问框架 = 1.域,协议和端口必须匹配.

我用Google搜索了相当数量,人们似乎在说这是无害的并且无视它.这似乎是错的,在我们的例子中,它实际上打破了页面.

如果我们更改我们的应用程序以便通过ajax回调动态嵌入视频(用户单击Wicket AjaxLink),我们仍然会在控制台中收到错误,但至少页面会完全呈现.不幸的是,这对我们不起作用,因为我们需要在用户第一次点击页面时默认加载视频.

编辑:我应该补充一点,虽然错误消息来自Chrome控制台,但该错误似乎影响了我尝试过的每个浏览器:Chrome,Safari和Firefox.

And*_*oso 24

安全错误不太可能破坏您的页面.看起来错误发生在YouTube框架内,这意味着在最坏的情况下,框架的内容将被搞砸.

在任何情况下,来自外部页面的框架/ iframe都不能影响父文档的内容,除非它们来自相同的域和端口号.这是浏览器安全的硬规则之一.

错误必须在您的标记中的其他位置.有没有机会看到一些示例标记?

[编辑]

错误也可能出现在嵌入代码标记中.或者,如果任何脚本标签直接包含在页面上(而不是iframe中),它可能就在那里.

通常当这样的问题发生时,由于某个地方有一个未封闭的标签,但它也可能是Javascript.

  • 这听起来很糟糕,因为它非常直观.但是,iframe无法内联关闭,仍然可与大多数浏览器兼容.所以不要使用`/>`而是需要使用`> </ iframe>` (25认同)
  • iframe不会自行关闭,因为它们可以包含要为无法呈现iframe的浏览器显示的内容,相当于noscript标记.自闭项标签在xhtml中很突出,但需要注意的是 - xhtml不依赖于doctype,而是依赖于内容类型.如果您的标题设置为提供text/html,浏览器会将其解释为html,而不是xhtml,并且可能导致渲染错误,例如这些. (15认同)
  • 哇,我简直不敢相信.我应该知道的更好:几天前我写了这篇文章,这基本上是同一个问题:http://stackoverflow.com/questions/6207309/wicket-ajax-call-failure-error-while-parsing-response-object-所需/ 6207343#6207343.非常感谢,安德鲁. (2认同)
  • 别客气.我永远不明白为什么`<iframe>`不能内联:)它是我的宠儿之一. (2认同)

小智 7

如果您在解决该JavaScript错误时遇到问题,可以尝试使用YouTube的旧嵌入代码.点击嵌入后,每个YouTube视频都可以选择此选项.您不会遇到该错误,因为它不使用iframe.代码看起来像这样:

<object width="560" height="315">
    <param name="movie" value="http://www.youtube.com/v/9DXL9vIUbWg?version=3&amp;hl=en_US&amp;rel=0"></param>
    <param name="allowFullScreen" value="true"></param>
    <param name="allowscriptaccess" value="always"></param>
    <embed src="http://www.youtube.com/v/9DXL9vIUbWg?version=3&amp;hl=en_US&amp;rel=0" type="application/x-shockwave-flash" width="560" height="315" allowscriptaccess="always" allowfullscreen="true"></embed>
</object>
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.


小智 5

我投票支持Jonathan Torres的回答,因为他的代码停止了Javascript警告.但是,当我验证代码时,我发现了错误.

所以我的回答是......

使用YouTube的嵌入代码时勾选"使用旧嵌入代码"复选框,这样您就不会使用iframe.

要使代码验证,您需要添加....

type="movie"
Run Code Online (Sandbox Code Playgroud)

data="http://SAME YOUTUBE URL USED IN THE FIRST PARAM ELEMENT/"
Run Code Online (Sandbox Code Playgroud)

OBJECT元素.然后使PARAM元素自动关闭(但不是EMBED元素).

这应该会使您的YouTube代码看起来像这样......

<object width="560" height="315" type="movie" data="http://www.youtube.com/v/9DXL9vIUbWg?version=3&amp;hl=en_US&amp;rel=0">
<param name="movie" value="http://www.youtube.com/v/9DXL9vIUbWg?version=3&amp;hl=en_US&amp;rel=0"></param><param name="allowFullScreen" value="true" />
<param name="allowscriptaccess" value="always" />
<embed src="http://www.youtube.com/v/9DXL9vIUbWg?version=3&amp;hl=en_US&amp;rel=0" type="application/x-shockwave-flash" width="560" height="315" allowscriptaccess="always" allowfullscreen="true"></embed>
</object>
Run Code Online (Sandbox Code Playgroud)

然后,您应该不会收到Javascript警告,并且您的代码应该验证.