将 youtube 中的 url 替换为嵌入代码 - 错误:访问属性“toString”的权限被拒绝

Posted

技术标签:

【中文标题】将 youtube 中的 url 替换为嵌入代码 - 错误:访问属性“toString”的权限被拒绝【英文标题】:Replace url from youtube to embed code - Error: Permission denied to access property 'toString' 【发布时间】:2012-10-17 12:38:44 【问题描述】:

我在 FireBug 中有这个代码和这个错误:

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

我该如何解决这个错误?

html

<div class="yturl">http://www.youtube.com/watch?v=UNMLEZrukRU</div>

JS:

$("div.yturl").each(function()
    var regex = /(\?v=|\&v=|\/\d\/|\/embed\/|\/v\/|\.be\/)([a-zA-Z0-9\-\_]+)/;
    var youtubeurl = $(this).text();
    var regexyoutubeurl = youtubeurl.match(regex);
    if (regexyoutubeurl) 
    
         $(this).html("<iframe width=\"390\" height=\"315\" src=\"http://www.youtube.com/embed/"+regexyoutubeurl[2]+"\" frameborder=\"0\" allowfullscreen></iframe>");
    
);

演示: http://jsfiddle.net/9e48p/

【问题讨论】:

您使用的是哪个版本的 Firefox 和 Firebug? 当我在 Chrome 中打开演示文件时,Chrome 中的 JS 控制台也显示错误消息:“不安全的 javascript 尝试从 URL youtube.com/embed/UNMLEZrukRU 的框架访问具有 URL jsfiddle.net/9e48p 的框架。域, 协议和端口必须匹配。” 对于将 Vimeo 嵌入 iFrame 的 Vimeo 用户也报告了同样的错误:vimeo.com/forums/topic:28447 还有一些关于 SO 处理问题的其他问题:***.com/questions/30540, ***.com/questions/902501, ***.com/questions/5649102. 在网页中嵌入 Facebook 视频时,我也遇到了同样的问题。 【参考方案1】:

不要仅仅因为它与您的代码没有直接关系而忽略此错误。

当您的嵌入最初被隐藏时,似乎会发生这种情况。

只需将?html5=1 添加到您的嵌入网址即可。 IE8 仍将采用 flash 版本。或使用 Youtube api 加载您的视频。

【讨论】:

这解决了我的问题。谢谢 优秀。 Wtf 是上面“已接受”答案中发布的所有 Adob​​e 工程师和 IBM BS 报告的? 也许是因为上述不是一个包罗万象的修复,并且接受的答案表明这是一个源自您无法控制的地方的错误?当这些人提交并承认错误报告被接受为他们的错时,这不是 BS 与票证 100% 相关。 +1 用于改进我的编程理念(“不要因为它与您的代码没有直接关系而忽略此错误。”) 这并没有解决我的问题。即使添加了它,我仍然会遇到同样的错误【参考方案2】:

该错误可由 Adob​​e 的 Flash Player 团队或 Google 工程师修复 - 您现在应该忽略它。它连接到 Flash Player 安全设置和嵌入到 Youtube 页面的 SWF 文件。问题一直是reported in the past by IBM,还有Mozilla Bugzilla entry。

当我在 Firefox 16.0.2 中停用 Flash Player 时,错误消息消失了。检查评论 #37:https://bugzilla.mozilla.org/show_bug.cgi?id=434522#c37

对于它的价值,我看到当 任何 flash 文件时会发生此错误, 甚至那些没有动作脚本调用(外部接口等)的 它们完全被加载到页面域所在页面上的 iframe 中 和 iframe 域不同。这意味着 iframe 当实际上存在跨域情况时会引起问题 地方。但是,是否真的存在还不是很清楚 试图成为一个应该被阻止和 出错了。

因为 Flash SWF 本身试图调用的并不是什么 “Location.toString”,与页面上的javascript无关 这样做,唯一的选择是闪光灯有东西 试图制作的插件本身(9.0.124 是我正在测试的) 调用父/顶部窗口来执行 Location.toString()。

虽然错误被标记为已解决,但附加的测试用例 https://bug434522.bugzilla.mozilla.org/attachment.cgi?id=321956 在最新的 Firefox 版本中(无论是在 Firebug 控制台中,还是在 Firefox 错误控制台窗口中)都会产生相同的错误消息。

更新: 该错误也已在旧错误数据库中提交给 Adob​​e:FP-561 "Location.toString" uncaught (security) exception caused by improper Flash plugin behavior(您需要一个帐户才能查看错误详细信息)。关闭错误时的最后一条评论:

在 Firefox 4 和 5 上使用最新的 Flash Player 10.3.181.34 进行测试,否 抛出了这样的异常。所以这个bug可能已经修复了,对吧?如果 您仍然遇到此问题,请在我们的新错误系统中提交错误 https://bugbase.adobe.com/ 并在新错误中添加指向此的链接 原始 JIRA 报告。我们很高兴在新版本中跟进您的报告 错误系统。

【讨论】:

这可以解释为什么没有显示 JavaScript 错误的行号,如果 Flash Player 导致了问题。 bugzilla 中的日期确实令人困惑。 2008 年报告,2009 年最后一次修改。该错误状态已解决,一段时间以来,此错误下没有评论。 BugZilla 票已在两张新票下重新开放:#385676 和 #1015700 任何查看旧票链接的人都会看到它已关闭/“修复”,但向下滚动到 cmets 以获取更多信息有关它的信息。【参考方案3】:

忽略该错误,它与您的代码无关。只是一个浏览器错误。

【讨论】:

呃,不,这不仅仅是一个浏览器错误。【参考方案4】:

您的 Iframe url 构造函数可能有问题。该错误是在加载到 Iframe 中的 youtube 脚本中引发的。未随脚本动态添加的硬编码 html Iframe 会引发相同的错误

<iframe   src="http://www.youtube.com/embed/UNMLEZrukRU" frameborder="0" allowfullscreen></iframe>

仅HTML版本演示http://jsfiddle.net/Lgt5f/

仔细检查 url 是否缺少参数,否则我会检查 youtube 支持资源

【讨论】:

【参考方案5】:

该问题可能是由无法正常工作的扩展程序引起的。

在使用安全模式解决 Firefox 问题中启动 Firefox,以检查是否是某个扩展或硬件加速导致了问题(切换到默认主题:Firefox/工具 > 附加组件 > 外观/主题)。

【讨论】:

以上是关于将 youtube 中的 url 替换为嵌入代码 - 错误:访问属性“toString”的权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

将 Youtube 视频嵌入 Facebook 并以特定时间码播放

如何将嵌入代码附加到 youtube 锚链接

单个嵌入 URL 中的多个 YouTube 视频

使用自定义字段从 Youtube 或 Vimeo 嵌入背景视频

我可以从自己的网站将视频上传到 YouTube [关闭]

用 youtube 视频替换图像