gpt4 book ai didi

javascript - 调用 window.location.assign 后,chrome/firefox 之间的网页渲染行为不同

转载 作者:行者123 更新时间:2023-11-30 17:13:19 24 4
gpt4 key购买 nike

我有一个网页显示实时 mjpeg 视频流(如“img”)和下载位图文件的链接(该视频流的最后保存的快照)。

当我在 Chrome 中点击链接时,浏览器下载 bmp 文件并且视频流继续呈现没有问题。

当我在 FireFox 中执行相同的操作时,会出现一个对话框提示“保存/打开”文件,并且实时视频停止在页面上呈现。显示一个空的占位符而不是图像。

这是一个小的 html 代码来演示这个问题:

<html>
<head>
<script>
function DownloadFile(link) {
window.location.assign(link);
}
</script>
</head>
<body>
<img align="center" src="http://148.61.151.202/mjpg/video.mjpg?camera=1" height="375" width="500">
<div style="color: rgb(142, 217, 255);"
onclick="DownloadFile('http://www.mywrapper.com/downloadfile/plug-ins/circle.bmp');">
Download
</div>
</body>
</html>

如何在 FF 和 Chrome 中启用下载位图文件并保持页面正确呈现?

最佳答案

这是因为两种浏览器处理链接分配过程的方式不同。您可以在 Firefox 中使用隐藏的 iframe 对链接分配进行沙箱处理以解决此问题。见下文:

<html>
<head>
...
</head>
<body>
<img align="center" src="http://148.61.151.202/mjpg/video.mjpg?camera=1" height="375" width="500">
<button id="download">
Download
</button>
<iframe style="display:none" id="f"></iframe>
<script type="text/javascript">
function DownloadFile (link) {
var f = document.getElementById("f");
f.contentWindow.location.assign(link);
}
document.getElementById("download").addEventListener('click', function(){
DownloadFile('http://www.mywrapper.com/downloadfile/plug-ins/circle.bmp');
});
</script>
</body>
</html>

这基本上会导致 FF 让主窗口继续其工作并创建一个 iframe,它有一个自己的 window,由 iframeElement 引用。 contentWindow 并遵循那里的链接分配。

iframe 被 css 隐藏了 :)

我对您的代码所做的一些更改:

  1. 始终将 script 标记放在结束 body 标记之前。这确保了 DOM 被正确加载并且我们可以对其进行处理。此外,脚本加载是阻塞的,这会减慢页面加载速度。将它们放在最后可以解决这个问题。
  2. 不要使用内联事件监听器(即 onclick=blabla)。查找、学习、练习和使用 addEventListener
  3. 遵循正确的语义,使用button 代替button。带有 onclickdiv 毫无意义。

关于javascript - 调用 window.location.assign 后,chrome/firefox 之间的网页渲染行为不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26572496/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com