gpt4 book ai didi

javascript - 标记视频播放错误处理程序 - JavaScript
转载 作者:可可西里 更新时间:2023-11-01 13:38:14 24 4
gpt4 key购买 nike

我正在尝试通过将 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> 标签文档说它响应的事件没有 onerroronload .但另一方面,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/

24 4 0