Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript HTML5视频不';当通过DOMParser呈现时,Safari中不会显示(通过innerHTML呈现效果良好)_Javascript_Safari_Domparser - Fatal编程技术网

Javascript HTML5视频不';当通过DOMParser呈现时,Safari中不会显示(通过innerHTML呈现效果良好)

Javascript HTML5视频不';当通过DOMParser呈现时,Safari中不会显示(通过innerHTML呈现效果良好),javascript,safari,domparser,Javascript,Safari,Domparser,(注意:关于不在safari上渲染视频有很多问题。这个问题是关于在safari中使用DOMParser渲染视频。如果我使用innerHTML渲染视频,一切都可以正常工作。) 我有最简单的HTML 5视频,通过DOMParser呈现如下: var htmlStr=` 您的浏览器不支持HTML5视频。 document.getElementById('test-vid').appendChild(doc.firstChild); `; var doc=new DOMParser().parseFr

(注意:关于不在safari上渲染视频有很多问题。这个问题是关于在safari中使用DOMParser渲染视频。如果我使用innerHTML渲染视频,一切都可以正常工作。)

我有最简单的HTML 5视频,通过
DOMParser
呈现如下:

var htmlStr=`
您的浏览器不支持HTML5视频。
document.getElementById('test-vid').appendChild(doc.firstChild);
`;
var doc=new DOMParser().parseFromString(htmlStr,“text/xml”);
这在chrome中运行良好,但在Safari中,视频不会被渲染。我只看到白色的屏幕。 然而,如果我通过innerHTML渲染它,一切正常,视频也会显示出来

任何人都可以就Safari中的DOMParser的问题提供建议。显示了对DOMParser的完全Safari支持


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

刚刚测试,视频在屏幕上并加载(html检查器、网络流量和DOM中加载的视频触发的caplay事件可以确认)

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

这似乎是一个狩猎问题,可能与其安全策略有关

视频

代码笔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');
 })
var htmlStr=`
您的浏览器不支持HTML5视频。
`;
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回购协议不是公开的,因此检索已修复和未修复的问题有点困难,但我可以肯定地说,您的代码是正确的,并且Safari有一个bug(切换选项卡时,请参阅上面的不一致行为).

请注意,您只需使用代码笔复制并粘贴代码即可。这样您就不会犯错误,比如将JavaScript放入HTML字符串变量中……;)@HereticMonkey有很多场景,实际上可以在字符串中包含HTML。模板文本通常用于在javascript中存储模板。@MosèRaguzzini当然,但我说的不是这个错误。我说的是将JavaScript放入HTML字符串中。
DOMParser
不会将其解析为JavaScript,而只解析为文本。。。在任何情况下,如果您将链接的CodePen与此处显示的代码进行比较,我的评论将更有意义。好的,在CodePen中,javascript在外部(包括Appenshild),我想错误是从penHm复制/粘贴的,使用Safari v13.0.2(14608.2.40.1.2)工作时非常有魅力在macOS Mojave上…你能告诉我你测试的是什么版本的操作系统和浏览器吗?你能提供截图吗?我已经在OSX High Sierrahoa上的Safari 11.1(13605.1.33.1.2)中进行了测试!Safari 11.1没有显示视频,但当我切换选项卡时,它显示了。你能确认吗?我已经添加了它的视频和代码来检查视频是否也存在,没有切换选项卡,因为canplay事件被触发
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');
 })