一轉眼,放假快半年了
早上起來睜開眼,誒呀,考試周又到了。各個科目的期中作業都在各自的平臺陸續發佈了。各種亂七八糟的科目,讓人煩不勝煩。首先在這裏
鄭重聲明:本人黑眼圈純粹是熬夜學習,與多人運動無關,請放心交友。
以iwrite英語教學平臺爲例,先來補一補之前落下的英語作文。剛點到輸入框,就彈出來了禁止粘貼的消息框,emmm,這都大學了,師生之間連這點基本的信任都沒有嗎?
不過,作爲一名準程序員,這個問題可難不倒我。編程的本質是處理信息,編程的意義是提高效率,編程的快樂在於解決問題,既然今天遇到了這個問題,那就倒杯茶,慢慢來解解這個bug。
爲什麼無法粘貼?
首先要來了解ctrl+c
複製下來的內容,爲什麼無法通過ctrl+v
進行粘貼?通過前端知識的學習,我知道網頁上的消息彈框
和鼠標行爲
等都是由javascript
控制的。那麼在網頁上禁止粘貼
,實際上就是網頁對鼠標右鍵的粘貼行爲進行了禁止
。
查閱資料後發現的確如此,下面是JavaScript
中對網頁特定功能開啓或關閉的語句,顯然,類似iwrite
這樣的平臺的Js文件中,對粘貼功能進行了false
處理。如果在網站開發中你也想要爲你的網頁加入類似這樣噁心的功能,直接將下面這些代碼錄入到你的Js代碼中即可。
script type=text/javascript
// 禁止右鍵菜單
document.oncontextmenu = function(){ return false; };
// 禁止文字選擇
document.onselectstart = function(){ return false; };
// 禁止複製
document.oncopy = function(){ return false; };
// 禁止剪切
document.oncut = function(){ return false; };
// 禁止粘貼
document.onpaste = function(){ return false; };
/script
從技術層面講,直接在前端頁面找到document.onpaste = function(){ return false; };
語句,將其返回值改爲true即可,但是,更多的網頁對鼠標實現的是動態Js事件
,這個思路首先被Pass掉,那就只能通過禁用JavaScript
來跳過禁用粘貼的語句了。
開始解Bug
既然知道了原因是因爲JavaScript
對粘貼功能進行了限制,那麼解Bug的思路就很明確了,只要瀏覽器禁用JavaScript
,問題就迎刃而解了。
等等,問題真的只是禁用JavaScript
這麼簡單嗎?實際上確實如此,禁用了JavaScript
就相當於關閉了前端校驗,在程序界有這樣一句話:前端校驗防君子,後端校驗防小人。說的就是前端校驗的安全性爲0,而後端校驗的安全性則固若金湯。
前端校驗一般是爲了增加用戶體驗,不過禁止粘貼這個功能的體驗就很微妙,這就很煩;而重要的校驗,如登錄用戶名、密碼等重要信息,都是要交給後端,通過後端技術,如JSR303等進行校驗。前者減少了服務器的壓力,後者更加安全,兩者配合額,妙哉妙哉。
舉個栗子:假設有一個簡單的用戶登錄功能,而我們只做了前端檢驗。那麼此時用戶可以按下F12
鍵,通過瀏覽器的控制檯來人爲的修改前端代碼,手動將前端校驗規則改變或者直接關閉,此時即使輸入錯誤的密碼,也會可以登錄成功的。原因就是缺少更加安全的後端校驗。
幸運的是,禁用粘貼這個功能是由JavaScript
控制的,僅僅涉及了前端內容。下面通過禁用JavaScript的方法解決這一問題。
解決方案
首先,在需要進行粘貼的頁面按下F12
鍵,打開控制檯
然後,在控制檯頁面按下F1
鍵,打開控制檯設置
在控制檯設置頁面找到並勾選Debugger
中的Disable JavaScript
選框。
此時,JavaScript
功能已經被禁用,頁面的粘貼功能已經恢復了,趕緊粘貼自己的小作文過來。
提交後,成功得到了81分的成績,所以猜測,頁面的計時功能並不在機器評分的考慮範疇之內,可以放心使用。
結語
上面的解決方案,實際上對一些網站上內容無法複製的情況
也是適用的。如某度文庫,就是需要付費纔可以進行文字複製,通過禁用JavaScript
的方式,同樣可以實現大段文字的複製。通過解決這個學習上的小問題,可以看到,其實無論前端還是後端,其實都是很有意思的嘛!