我有一个显示实时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中启用下载位图文件并保持页面正确呈现?
答案 0 :(得分:2)
这是因为两个浏览器处理链接分配过程的方式不同。您可以使用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
,由addEventListener
引用并跟随那里的链接分配。
使用css隐藏iframe:)
我在您的代码中做了一些更改:
button
。button
代替div
。 onclick
{{1}}毫无意义。