- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试通过将 YouTube 和其他视频嵌入到 HTML 源中以在 iOS 中显示它们来播放它们。
两者都是 <embed>
和 <object>
该技术有效,但它们都无法在视频无法播放或传递给它的 URL 错误时调用回调函数(因此无法播放)。
我将这段 HTML 代码与 JavaScript 一起用于适当的回调:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>video test</title>
<script type="text/javascript">
function errorEncountered()
{
alert('Found error');
}
function loadingCompleted()
{
alert("loading completed");
//document.getElementById('youtubeObject').onerror="errorEncountered()";
//alert(document.getElementById('youtubeObject'));
}
function clickCompleted()
{
alert("Clicked on embedded object");
}
</script>
</head>
<body >
<div>
<object
id="youtubeObject"
type="application/x-shockwave-flash"
data="http://asdfasdf"
width="643"
height="400"
onload="loadingCompleted()"
onerror="errorEncountered()"
onclick="clickCompleted()">
<param name="movie" value="http://asdfasdf" />
<param name="onError" value="errorEncountered()" />
<!-- <param name="onload" value="loadingCompleted()" /> -->
<param name="allowScriptAccess" value="always" />
<param name="enablejsapi" value = "1" />
<p>
Couldn't load the video
</p>
</object>
</div>
<!-- document.getElementById('youtubeObject').onerror="errorEncountered()"; -->
<!-- document.getElementById('youtubeObject').addEventListener('onerror',function(){alert('error playing video')},true); -->
</body>
</html>
<!-- Actual Youtube URL "http://www.youtube.com/v/J_DV9b0x7v4" -->
将错误的 URL 替换为实际的 YouTube URL 即可播放视频。但是错误的 URL 应该会触发 JavaScript 函数,但这种情况并没有发生。
我检查了 documentation of <object>
和 corresponding events . <object>
标签文档说它响应的事件没有 onerror或 onload .但另一方面,onerror event object文档声明它受 <img>
支持, <object>
, <script>
& <style>
标签。
因此,我尝试插入“onerror”事件并将其作为 <param>
传递到 <object>
标记以便插件处理它,或者,也尝试将其作为 <object>
的属性标签(只是试试我的运气)。对象的“onclick”属性确实有响应,但“onerror”和“onload”没有响应。
尽管我的问题是,为什么 <param>
没有?传递给带有 onerror 的插件,当传递给它错误的 URL 时,onload 不会触发?
我试过 embed tag , 但没有使用 embed 附加 onerror 和 onload 处理程序的范围标签。
有没有办法在视频加载/播放失败时从 HTML 中触发 JavaScript 函数(使用嵌入或对象技术)?
PS:我偶然发现了一些讨论这个问题的链接,但没有一个最终得到解决方案,这就是我开始这个新问题的原因,并且我正在针对特定于 iOS 的案例这样做。
Detect <embed> tag failing to load video
http://www.webdeveloper.com/forum/showthread.php?t=590
感谢您的任何建议和帮助。
添加:<object>
之间标签中的替代内容加载& </object>
将在 iPad 模拟器中显示内容,但不会在设备本身上显示。即使这是我发现难以破解的难题之一。
PS:我已经尝试过该方法,对于特定于 youtube 的我已经尝试添加 onError 回调,但它从未触发!使用了正常的 youtube 指定方式,我们可以在其中为 youtube 插入 onError 回调:https://developers.google.com/youtube/iframe_api_reference#Loading_a_Video_Player
上面的问题是,我们必须创建一个 YT.Player
并将 videoID 设置为对象。这将导致无法播放其他来源的视频。所以用了一个稍微非常规的方式:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>video test</title>
<script type="text/javascript">
function errorEncountered(event)
{
alert('Found error');
}
function errorFound()
{
alert('Found error');
}
</script>
<script type='text/javascript' src='http://www.sandeshkadur.com/wp-content/themes/Gaia/js/video.js?ver=1.0'></script>
</head>
<body id="mainBody">
<iframe id = "youtube_vid" src="http://player.vimeo.com/video/28723846?color=ffffff" frameborder="0" width="640" height="360"></iframe>
<!-- From https://groups.google.com/forum/#!msg/youtube-api-gdata/myLe-SdMZ6w/tziw7W2LBv4J -->
<!-- <iframe id="youtube_vid" src="asdfasdf"></iframe> -->
<script>
var player = document.getElementById("youtube_vid");
new YT.Player(player, {
events: {
'onStateChange': function(){console.log(arguments)},
'onError': errorEncountered
}
});
</script>
</body>
</html>
虽然它可以正常播放视频,但它至少不会收到 Youtube 链接的错误回调!
最佳答案
使用新的 <iframe>
嵌入代码:
<iframe width="420" height="315" src="http://www.youtube.com/embed/dQw4w9WgXcQ" frameborder="0" allowfullscreen></iframe>
YouTube 将检测用户使用的平台并提供适当的代码,即桌面用户的 Flash,<video>
适用于 iOS 等
您可以通过单击“共享”按钮,然后单击“嵌入”按钮找到此嵌入代码(在任何 YouTube 视频页面中)。
更新:您不会找到一个通用的解决方案来在 iOS 设备上播放来自任何 vendor 的任何视频。提供商必须专门对视频进行编码,以便 <video>
可以播放Safari 中的元素。
我建议:
找到您支持的每个视频网站的嵌入代码(不是 FLV 源 URL,该网站提供给用户的嵌入代码)。
如果站点使用 <iframe>
那么他们可能支持在 iOS 上播放。逐字使用此代码。
如果站点使用 Flash 播放器,请使用 SWFObject嵌入视频而不是他们的 <embed>
代码。如果 SWFObject 检测到浏览器不支持 Flash,它可以改为显示一些替代内容(例如“抱歉,您需要安装 Flash 才能观看此视频”之类的消息)。
使用巨人switch
声明:
switch (videoType):
case 'YouTube':
// use YouTube iframe code
break;
case 'Vimeo':
// use Vimeo iframe code
break;
// ...on and on...
default:
// use SWFObject to embed
}
关于javascript - <embed> 或 <object> 标记视频播放错误处理程序 - JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11028861/
Xcode11 Beta 的“框架、库和嵌入式内容”部分中有 3 个新选项用于添加库。 Xcode 库部分屏幕截图 谁能解释一下他们是做什么的吗? 最佳答案 正如@przemyslaw-jablons
我试图弄清楚Wordpress上的[embed] [/ embed]短代码功能是否可以在iframe中显示标题? 将youtube视频显示在页面上后,对其进行检查时,其显示如下: 是否有一种方法可以
My company已经创建了 GraphPad Prism,这是一个广泛使用的程序,供科学家分析数据和制作技术图表。通常,科学家会从 GraphPad Prism 导出图形以提交给科学期刊。现在大多
如果您尝试将 Elm.embed 与 div 以外的元素一起使用,则会出现此错误: Elm.node must be given a DIV, not a BODY. 我可以看到 this fairl
一年后我重新访问discord.py,发现异步显然不可用,所以显然,现在我正在使用重写并且不知道我在做什么。我正在尝试发送一个简单的嵌入内容,但机器人却说: '' 这是我的代码: @bot.comma
我采取了此tutorial中的每一步并获得了所有必需的information / IDs / Parameters 。还看了这些vids . 但是,在运行 sample python code (fl
我正在为 messageUpdate 创建一个事件,并且一切都“完美”地工作,除非有人发送包含超过 1024 个字符的消息,它会返回错误 addField有字数限制。 如果已编辑的消息已达到限制,我怎
是否可以从 Embedly 卡片中删除标题?我想删除或隐藏整个 div.hdr 部分,包括 provider-favicon 和 provider-name,以便只显示卡片的 div.bd 主体。 我
我想向网站添加 5-10 天的天气预报。我无法找到提供预测嵌入代码的网站。我发现的几个看起来很糟糕(大约 1990 年代)。我只是想知道是否有一个看起来很干净的解决方案,我可能会在无休止的 Googl
Closed. This question is opinion-based。它当前不接受答案。
我一直在努力改进我的游戏网站,我想添加一个功能,当您按下按钮时,系统会要求您输入密码,然后就会出现游戏的作弊版本。这是我到目前为止的代码。编辑:我也不关心密码是否安全,所以如果它在代码中很明显就没关系
您是否知道任何可能帮助我将 jBPM Web 设计器嵌入现有 Web 应用程序的指南/教程/示例项目? 即: 我需要包含哪些 Maven 库? 是否可以在主应用程序 WAR 中部署设计器特定的组件(这
我正在尝试在我的浏览器中播放一些声音 (mp3)。找到但是默认 Controller (暂停按钮、音量和时间 slider )并不是很漂亮,所以我想知道如何使用一些 jquery 按钮来控制它? 然后
根据 W3Schools和 Pluralsight's HTML5类(class),标签是 HTML5 的"new"标签。但我一直在使用它......永远,它适用于我测试过的任何浏览器。 This例如
目前正在进行响应式设计,需要嵌入响应式 Spotify。我尝试只使用 css(不起作用),然后使用 fitvids.js(作为一个奇怪的 janky 解决方案),这种方法有效,但仅在初始页面加载时有效
我正在制作一个 discord 机器人,它将更改 channel 的特定名称 代码 if(command === `${prefix}openslot`) { let embed = new
如何将代码嵌入到文档字符串中,以告诉 Sphinx 格式化代码,就像在 Markdown 中所做的一样(不同的背景颜色,等宽的无字体)?例如记录一个代码使用示例。 """ This is a modu
我将以下 bazel BUILD 配置为 gazelle(name = "gazelle") go_embed_data( name = "static_files", srcs =
我已将过渡效果添加到包含视频的容器 div。我在应该嵌入视频的地方出现黑屏。我尝试了 youtube 和 vimeo,但它们都不起作用,所以我认为这与 flash 有关。当我注释掉过渡设置时,视频又可
我想做的是获取一个YouTube播放列表(http://www.youtube.com/embed/videoseries?list=PLzMZz3zuUATIdU0RIndFQiQQzADew0hZ
我是一名优秀的程序员,十分优秀!