在現代互聯網時代, 圖片和內容被盜用是一個普遍的問題, 很多網站都希望防止用戶使用操作系統的內置截屏工具或瀏覽器插件截取網站圖片或內容. 使用JavaScript可以有效的限制用戶使用截屏工具.
JavaScript可以通過canvas API實現對網頁內容的截屏, 然而, 這個API可以被禁用或甚至更嚴格的規則可以被應用. 非常的有趣的是現代瀏覽器使用了新的技術妨礙抓取的行為,包括不支持禁止右鍵和復制行為.
<code> /* Disable Right Click */ document.addEventListener('contextmenu', event => event.preventDefault()); /* Disable Text Selection */ document.addEventListener('selectstart', event => event.preventDefault()); </code>
盡管匆忙引起的代碼可能會制止抓屏行為, 但它是無效的在很多系統和用戶或插件調試模式下,這依然是一個問題. 而事情也不再簡單. 應用程序也越來越深入到用戶的桌面和設備中.
為了有效的抵制截屏和盜圖行為, 我們需要考慮廣泛的因素, 從監視和檢測到圖片和內容的潛在盜用和重新發布.
現在許多網站采用的方法就是借助 JavaScript 的技術,在網站的各個關鍵位置執行代碼,動態生成、加密或轉換圖片以防止抓屏。比如利用 CSS3 如 transform、filter、clip-path、backdrop-filter、mix-blend-mode 等特性對圖片進行加密轉換,或使用 JavaScript 將圖片轉換為 dataURL 格式識別,再根據用戶操作控制生成,也使用了 HTML5 中的 ArrayBuffer、Blob、FileReader 等技術。
<code> /* Make image unsaveable */ img.oncontextmenu=function(){return false} img.ondragstart=function(){return false} img.onmousedown=function(){return false} /* Disable Print Screen and Window on Top */ document.addEventListener('keyup', function(e) { if (e.key === 'PrintScreen') { console.log('Screenshot prevented.') } }) /* Disable Browser Debugging */ addEventListener('devtoolschange', event => { document.body.innerHTML = 'You do not have permission to debug this page' }) </code>
以上這些技術在瀏覽器中是互相通信的,然而我們依然不能完全保證它們的有效性. 最終在用戶側,本身就存在一些不合法的插件可以破解以上所有技術。所以說在進行應用程序開發時,”防抓取“并沒有被完美地解決,所以一定程度上,“防抓取”的措施是落后于損失的.這里主要希望開發者們可以了解抓取行為的主要方法和知道如何使用JavaScript來降低抓取行為對應用程序的風險。