介绍
这篇文章主要为大家展示了JavaScript如何实现禁止用户保存图片,内容简而易懂,希望大家可以学习一下,学习完之后肯定会有收获的,下面让小编带大家一起来看看吧。
添加事件禁止选择,拖拽,右键(简单的禁止用户保存图片,但无法阻止用户打开控制台查看,或是直接抓包)
将之转换为画布(让浏览器认为不是图片以此禁止用户对之进行图片的操作,但无法阻止抓包)
禁止用户使用控制台查看源码(阻止浏览器打开控制台,但无法阻止抓包)
传输图片使用自定义格式(可以阻止抓包,但需要后台配合)
注:以下内容使用反应+ ts实现
简而言之,这是一种简单有效的方式,能够在用户不打开控制台的情况下阻止用户保存图片。
导出功能preventDefaultListener (e:有){ e.preventDefault () } & lt; img src=https://www.yisu.com/zixun/{props.url} alt=" " 风格={{//禁止用户选择 userSelect:“没有”,//禁止所有鼠标事件,过于强大,图片仅用于展示可用//pointerEvents:“没有”, }}>出口异步函数imageToCanvas (url:字符串、帆布:HTMLCanvasElement) { 返回新的承诺((解决,拒绝)=比;{//新建形象对象,引入当前目录下的图片 const img=新形象() img。src=https://www.yisu.com/zixun/url const c=canvas.getContext (2 d) !//图片初始化完成后调用 img。onload=function () {//将画布的宽高设置为图像的宽高 画布。宽度=img.width 画布。身高=img.height//帆布画图片 c。drawImage (img, 0, 0, img。宽度,img.height) 解决() } img。addEventListener(“错误”,(e)=> { 拒绝(e) }) }) }
禁用帆布事件
const throwFn=()=比;{ 把新的错误( “未捕获DOMException:未能执行& # 39;toDataURL& # 39;>/* * *兼容异步函数的返回值 * @param res返回值 * @param调同步/异步结果的回调函数 * @typeparam T处理参数的类型,如果是承诺类型,则取出其泛型类型 * @typeparam Param处理参数具体的类型,如果是承诺类型,则指定为原类型 * @typeparam R返回值具体的类型,如果是承诺类型,则指定类为承诺型,否则为原类型 * @returns处理后的结果,如果是同步的,则返回结果是同步的,否则为异步的 */导出功能compatibleAsyncR=T> ( res: Param, 回调:(r: T)=比;R, ):Param延伸Promise ,# 63;Promise R: { 返回(res instanceof承诺 ,# 63;res.then(回调) :回调(res)一样) }/* * *测试函数的执行时间 *注:如果函数返回承诺,则该函数也会返回承诺,否则直接返回执行时间 * @param fn需要测试的函数 * @returns执行的毫秒数 */导出功能timing ( fn: (…参数:任何[])=比;R,//函数返回类型是承诺的话,则返回Promise ,# 63;Promise 数量:{ const开始=performance.now () const res=fn () (返回compatibleAsync (res)=比;performance.now()——开始) }/* * *禁止他人调试网站相关方法的集合对象 */出口类AntiDebug {/* * *不停循环调试器防止有人调试代码 * @returns取消函数 */公共静态cyclingDebugger():函数{ const res=setInterval(()=比;{ 调试器 },100) 返回()=比;clearInterval (res) }/* * *检查是否正在调试器并调用回调函数 * @param fn回调函数,默认为重载页面 * @returns取消函数 */公共静态checkDebug ( fn:=()函数=比;window.location.reload (), ):函数{ const res=setInterval(()=比;{ const diff=时间(()=比;{ 调试器 }) 如果(diff比;500){ console.log (diff) fn () } }, 1000) 返回()=比;clearInterval (res) } }
useEffect(()=比;{ const cancel1=AntiDebug.cyclingDebugger () const cancel2=AntiDebug.checkDebug(()=比; console.log(& # 39;请不要打开调试& # 39;), )任何 返回()=比;{ cancel1 () cancel2 () } }, []) 返回& lt; img src=https://www.yisu.com/zixun/{url} alt="/>
该功能需要服务端配合,故而此处赞不实现,可以参考微信读的书,就是将文本转为画布,数据传输也进行了加密,可以在很大程度上防止普通用户想要复制/下载的行为了。
以上就是关于JavaScript如何实现禁止用户保存图片的内容,如果你们有学习到知识或者技能,可以把它分享出去让更多的人看的到。