通过 DOMParser 渲染时,HTML 5 视频不会显示在 Safari 中(通过 innerHTML 渲染工作正常)

2024-07-04

(注意:有很多关于视频无法在 safari 上渲染的问题。这个问题是关于在 Safari 中使用 DOMParser 渲染视频。如果我使用innerHTML 渲染视频,一切正常。)

我有最简单的 HTML 5 视频,它是通过以下方式呈现的DOMParser如下:

codepen https://codepen.io/sangupta/pen/poozmwa

var htmlStr = `
<video xmlns="http://www.w3.org/1999/xhtml" controls="">
  <source src="https://www.w3schools.com/html/mov_bbb.mp4" type="video/mp4"/>
  Your browser does not support HTML5 video.
</video>
document.getElementById('test-vid').appendChild(doc.firstChild);
`;
var doc = new DOMParser().parseFromString(htmlStr, "text/xml");

这在 Chrome 中工作正常,但在 Safari 中,视频不会被渲染。我只看到白屏。 但是,如果我通过innerHTML 渲染它,一切都会正常并且视频会显示出来。

任何人都可以建议有关 Safari 中 DOMParser 的问题吗?caniuse https://caniuse.com/#feat=xml-serializer显示 Safari 对 DOMParser 的完整支持。

在 safari 的多个版本上进行了测试,即版本 12.1.1 (14607.2.6.1.1) 和版本 11.1 等。


刚刚测试了一下,视频IS在屏幕上并加载(html 检查器、网络流量和caplayDOM 中加载的视频触发的事件可以证实这一点)。

如果您尝试切换选项卡然后返回视频选项卡,视频将会显示,但没有控件,尽管我可以通过触发事件来播放它。

这似乎是 Safari 的问题,可能与其安全策略有关。

VIDEO https://recordit.co/mdZ4J89CL8 https://recordit.co/mdZ4J89CL8

CodePen JS

var htmlStr = `
<video id="myvideo" xmlns="http://www.w3.org/1999/xhtml" controls="">
  <source src="https://www.w3schools.com/html/mov_bbb.mp4" type="video/mp4"/>
  Your browser does not support HTML5 video.
</video>`;

var doc = new DOMParser().parseFromString(htmlStr, "text/xml");

document.getElementById('test-vid').appendChild(doc.firstChild);

window.onclick = function(){
  document.getElementById('myvideo').play();
}

 document.getElementById('myvideo').addEventListener('canplay', function(){
   console.log('canplay');
 })

不幸的是 Safari 存储库不是公开的,因此检索已修复和未修复的问题有点困难,但我可以肯定地说你的代码是正确的 and Safari 有一个错误(切换选项卡时请参阅上面不一致的行为)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 DOMParser 渲染时,HTML 5 视频不会显示在 Safari 中(通过 innerHTML 渲染工作正常) 的相关文章

  • 如何禁用 Mapbox 中的事件侦听器?

    我正在尝试使用 React 上的 Mapbox 来控制图层上的事件侦听器 map off 应该可以做到这一点 但它并没有删除图层中的 onclick 事件 https docs mapbox com mapbox gl js api map
  • 使用 Cookie 记住我时的安全性

    我已经在 PHP 中实现了一个登录类 并且想要创建一个记住账号键入功能 这样用户就不必每次访问都登录 我对此进行了一些研究 并准备使用 PHP setcookie 编写它 但后来遇到了这个页面 如何使用 jquery 创建 记住我 并存储
  • 通过鼠标滚轮按下事件在网站上滚动了多少像素?

    我正在编写一个自定义滚动条并正在捕捉mousewheel事件 我使用它来调整我想要滚动的元素的scrollTop 向下滚动的像素数是否有标准 或者因系统而异 我在最新版本的 Firefox 中显示 114px 许多鼠标驱动程序允许您设置鼠标
  • CdnFallbackExpression 列表

    CDN 上有很多可用的开源 JS 库 使用 ASP NET MVC 的捆绑功能 可以定义 CDN 失败时的后备方案 CdnFallbackExpression 是一个有用的功能 但是 我似乎找不到用于 jquery 之外的库的任何表达式列表
  • 无法使用 webpack 和 Laravel mix 加载 popper.js

    我在我的项目中使用 bootstrap 4 beta 和 Laravel 5 4 并使用 npm 和 laravel mix 加载我的 js 依赖项 到目前为止 一切都运行良好 除了当我尝试使用 booostrap js 方法时 它向我抛出
  • GWT - 找不到入口点类

    我最近开始开发另一个 GWT 模块 因此 我创建了一个包 其中包含所有新类和一个实现新入口点的特定类 我将 gwt xml 修改为新的入口点 当我编译时 出现以下错误 GWT Compiling client side code WARNI
  • 用随机图像填充表格

    首先 我的编码经验包括修改简单的脚本以在我的页面上工作 其次 我搜索并发现了几个类似的问题 但无法完全解决它们 我需要一些帮助来使用大约 40 张图像数组中的随机图像填充 3x3 表 我目前有一个使用 backgroundImage 属性的
  • 如何将angularjs变量值分配给html元素属性,例如输入elememnt的name属性

    我对 Angular 完全陌生 我有一个 AngularJS scope 变量 scope testme inputname 我想将此变量值分配给 html 元素的 name 属性 我想 结果如下
  • 使用 GruntJs 缩小脚本

    我有几个 js 文件 我似乎可以让 GruntJs 正确地连接 缩小它们 如果我单独做每一个 它们就会工作得很好 如果我单独组合然后尝试缩小组合文件 它也不起作用 Here is the error 有想法该怎么解决这个吗 或者也许是什么原
  • 我应该担心 JavaScript 支持吗?

    我开发了一个支持ajax 的网站 然而 该网站目前无法在没有 JavaScript 的情况下运行 该网站在我测试过的任何浏览器以及 iPhone 诺基亚手机上都运行良好 但是 我还应该担心 javascript 支持吗 我知道有一些技术可以
  • Chrome 与 Firefox 后台缓存

    我有一个 drupal 网站 其视图链接到详细信息页面 视图具有分页功能 问题是这样的 在 FireFox 中 当您从视图的第 8 页转到详细信息页面时 然后单击后退按钮 您最终会看到page 8的视图 好的 在 Chrome 中 当您从视
  • 如何在引导程序使用jquery中单击另一个链接时更改活动类?

    我有一个 html 作为侧边栏 并使用Bootstrap ul class nav nav list li class active a href Link 1 a li li a href link2 Link 2 a li li a h
  • Webpack - devtool:CSS 的源映射和 JS 的 eval-source-map?

    如果我使用 devtool source map 它与 CSS 配合得很好 但是 我的 JavaScript 变量名并不有趣 所以 如果我使用 devtool eval source maps 生活很美好 调试 JS 但我的 CSS 然后指
  • 检查纬度和经度是否在谷歌地图圆内

    以下是我正在寻找的期望结果 我想知道的是 我使用中心点纬度和周围半径创建了圆 现在我想知道 如何检查 计算 纬度和经度是否在该区域之内或之外 如果您能给我 JavaScript 代码示例 我将不胜感激 我正在使用 Google 地图 API
  • 当更改来自另一个函数时,onchange 事件不会触发

    我有一个输入文本 它从 Javascript 函数 带有倒计时的计时器 获取他的值 我想在输入文本为 0 时引发一个事件 所以我使用更改事件监听器 不幸的是 当更改来自 javascript 函数时 它似乎不会引发该事件 即使更改来自 Ja
  • 错误:“访问受限 URI 被拒绝”

    访问受限 URI 被拒绝 代码 1012 中断此错误 xhttp send null function getXML xml file if window XMLHttpRequest var xhttp new XMLHttpReques
  • Chart.js 忽略画布高度和宽度

    继Chart js 文档 http www chartjs org docs getting started creating a chart我正在尝试绘制一个小图表
  • 获取此 contenteditable 元素中的当前行和行索引?

    我有一个这样的元素 span line 1 line 2 line 3 line 4 line 5 span 假设用户正在编辑 第 4 行 如何获取该 contenteditable 元素中的当前行和行索引 在插入符号位置 这是使用选择属性
  • 不固定高度的滚动div

    我需要构建一个动态调整大小的滚动 div div 应动态调整大小以适应屏幕 但如果内容不适合屏幕 它应该显示一个滚动条 因此浏览器自己的滚动条永远不需要激活 我可以通过在 div 中放置另一个 div 并使用来让滚动条出现在 div 中ov
  • Phantomjs 可以工作,但速度很慢

    我正在尝试使用 PhantomJS 截取网页的屏幕截图 具体来说 我正在使用捕获的示例espn com from this http skookum com blog dynamic screenshots on the server wi

随机推荐

  • Spring-security - AccessDecisionVoter-impl 不会被调用

    我正在尝试创建自定义 AccessDecisionVoter 并在调用它时将其停止在调试中 我在每个方法中都设置了断点 但没有任何反应 spring security xml
  • Cckeditor 字符限制与 charcount 插件

    我怎么能够prevent用户输入新字符在最大字符之后已达到限制 Ckeditor charcount 插件只是向我显示剩余的字符 我希望它停在 0 处 但它会减去整数 这是我的 html 代码
  • yield return new WaitForSeconds(2) 销毁函数

    我决定创建一个类似记忆的小游戏 学习用unity3d进行游戏开发 游戏应在玩家点击卡片后等待 2 秒 然后再将卡片翻转回来 The yield return new WaitForSeconds 2 语句对此应该是完美的 但它的作用是不执行
  • AjaxToolkit for 3.5 不工作

    我正在尝试使用从下载的 ajaxtool 套件here http ajaxcontroltoolkit codeplex com releases view 43475对于颜色选择器 当我尝试在我的任何页面上使用它时 它会显示一个错误 Th
  • SqlCommand 到 T-SQL

    有没有办法将 SqlCommand 对象转换为实际的 T SQL 命令 然后发送到 SQL Server 我不这么认为 参数和查询文本分别发送到SQL Server SQL Server相应地处理它们 您可以从 SqlCommand Com
  • 如何将编码器作为参数传递给数据帧的 as 方法

    我想通过使用不同的案例类将 dataFrame 转换为 dataSet 现在 我的代码如下所示 case Class Views views Double case Class Clicks clicks Double def conver
  • ICMP 套接字(Linux)

    IP协议下可以使用ICMP套接字吗 也许是这样的 socket PF INET
  • storageFolder.CreateFileAsync 期间出现 UnauthorizedAccessException

    我有下面的代码 Point to c users yancheng documents visual studio 2012 Projects App5 App5 bin x86 Debug AppX StorageFolder stora
  • pandas 预期第 153 行有 10 个字段,看到 11 个字段,如何再添加一列

    我有一个 info txt 文件 它看起来像这样 B 19960331 00100000 00000000000000 00000000000000 00000000000000 00000000 00000000000000 000000
  • 配置 argparse 以接受带引号的参数

    我正在编写一个程序 除其他外 它允许用户通过参数指定要加载的模块 然后用于执行操作 我试图建立一种方法来轻松地将参数传递到这个内部模块 并且我试图使用 ArgParse 的action append 让它构建一个参数列表 然后我将通过它 这
  • 如何将 SQL 转储导入表而不覆盖重复字段

    如何将 MySQL 转储文件导入数据库而不覆盖具有相同值的记录 这里是link http dev mysql com doc refman 5 0 en mysqlimport html到手册 您可以指定是否替换现有记录 replace r
  • 如何在MongoDB聚合中添加自增字段?

    我想添加一个附加的键数字 其中包含自动递增数字的值 我怎样才能实现这个目标 下面是查询 不进行unwind和group是否可以达到这个结果 match iContestId 5e4118161a7b5765ee9b40ef project
  • Flask:如何从模板目录下提供静态文件?

    我使用 Flask 并想要更改我的资产文件夹目录 这是我的文件夹结构 python static js img font css templates default css js img venv app py 我想移动静态文件夹下的所有文
  • Python下载具有特定文件名的youtube

    我正在尝试下载 youtube 视频pytube这边走 from pytube import YouTube YouTube http youtube com watch v 9bZkp7q19f0 streams first downlo
  • Vb.Net动作委托问题?

    我是 vb net 新手 这个问题可能很新手 之前已经回答过 但我找不到 我正在尝试 lambda 功能并在这里受到打击 Private Function HigerOrderTest highFunction as Func Of Int
  • System.Diagnostics.Process UseShellExecute 到底做了什么?

    我有一个 MSBuild 任务 它执行 除其他外 对 xcopy 的调用 我发现 当我从批处理文件运行 MSBuild 任务时 对 xcopy 的调用可以正确执行 并且无法执行或生成任何输出 无法让我知道从另一个批处理文件调用同一个批处理文
  • Android 变量 OnClick 监听器

    有没有一种方法可以为许多按钮提供 1 个 onClick Lister 我可以在其中抛出一个 case 语句来根据单击的按钮执行操作 我知道我可以为 100 个按钮创建 100 个不同的侦听器 但我必须认为我可以创建一些漂亮的变量来用更少的
  • C# 2.0中使用HashSet,兼容3.5

    我真的很想在我的程序中使用哈希集 使用字典感觉很丑 有一天我可能会开始使用 VS2008 和 Net 3 5 所以我的理想是即使我不能 或者我可以 使用hashsets http msdn microsoft com en us libra
  • 如何才能运行性能测试十次以上?

    默认情况下 Xcode 性能测试会运行十次 我的结果是这十次测试的平均值 问题是每次运行时平均结果变化很大 因此我必须运行测试至少五次才能获得收敛结果 这既乏味又耗时 有没有办法配置 XCode 或单元测试本身运行十次以上 XCTestCa
  • 通过 DOMParser 渲染时,HTML 5 视频不会显示在 Safari 中(通过 innerHTML 渲染工作正常)

    注意 有很多关于视频无法在 safari 上渲染的问题 这个问题是关于在 Safari 中使用 DOMParser 渲染视频 如果我使用innerHTML 渲染视频 一切正常 我有最简单的 HTML 5 视频 它是通过以下方式呈现的DOMP