前端页面媒体资源防下载
背景
前端进行展示图片、视频、pdf等媒体资源时,对于私有化知识的资源需要做一个保护机制,即防止用户下载留存。
防范维度:
无任何web技术的人群:大众用户
懂web技术的人群
此文档记录的技术方向主要是针对第一类:大众用户
视频
针对视频,可使用现成js插件来实现防下载功能,推荐以下两个插件:
video.js GitHub 37.5k;Demo地址:
https://videojs.com/advanced/?video=disneys-oceansplyr Github 26k;Demo地址:https://plyr.io/
video-js使用示例:
<link href="https://vjs.zencdn.net/7.11.4/video-js.css" rel="stylesheet">
<script src="https://vjs.zencdn.net/7.11.4/video.min.js"></script>
<video id="my-video" class="video-js" controls preload="auto" width="640" height="264" poster="MY_VIDEO_POSTER.jpg" data-setup="{}">
<source src="MY_VIDEO.mp4" type="video/mp4">
<p class="vjs-no-js">
To view this video please enable JavaScript, and consider upgrading to a web browser that
<a href="https://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a>
</p>
</video>
<script>
var player = videojs('my-video');
player.ready(function() {
// 禁用右键菜单
player.el().oncontextmenu = function() { return false; };
// 隐藏下载按钮
var controlBar = player.getChild('controlBar');
var fullscreenToggle = controlBar.getChild('fullscreenToggle');
if (fullscreenToggle) {
fullscreenToggle.hide();
}
});
</script>
ply使用示例:
<link rel="stylesheet" href="https://cdn.plyr.io/3.6.8/plyr.css" />
<script src="https://cdn.plyr.io/3.6.8/plyr.polyfilled.js"></script>
<video id="player" playsinline controls>
<source src="MY_VIDEO.mp4" type="video/mp4" />
</video>
<script>
const player = new Plyr('#player', {
controls: ['play', 'progress', 'current-time', 'mute', 'volume', 'fullscreen']
});
// 禁用右键菜单
document.getElementById('player').oncontextmenu = function() { return false; };
</script>
如果使用浏览器打开pdf会有浏览器自带的下载功能,这里推荐使用以下插件来展示pdf:
pdf.js GitHub 47.1k;Demo地址:https://mozilla.github.io/pdf.js/examples/index.html#interactive-examples
使用效果,在矩形区域显示一个pdf文件的内容:
但是:在矩形区域上方点击鼠标右键会出现一个【图片另存为】,这时候需要使用下方和【图片】一样的设置
图片
利用css设置禁止选中和js中的禁止右键:
css:
img {
-webkit-user-select: none; /* Safari */
-moz-user-select: none; /* Firefox */
-ms-user-select: none; /* IE10+/Edge */
user-select: none; /* Standard */
pointer-events: none;
}
js:
//防止右键下载图片
document.oncontextmenu = function () {
return false;
}
// 或者
<div id="myElement" oncontextmenu="return false;">...</div>
vue中的写法示例:
<template>
<img ref="myImage" src="your-image.jpg" />
</template>
<script>
export default {
mounted() {
this.$refs.myImage.oncontextmenu = function(event) {
event.preventDefault();
return false;
};
}
}
</script>
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!