禁用頁面部分JavaScript方法的具體實(shí)現(xiàn)
更新時間:2013年07月31日 17:23:30 作者:
方法重寫,重寫要禁用的方法,并讓它什么也不做,結(jié)果證明真的可行,但并不知道是不是一個科學(xué)的方法,我拿出來與大家共同討論一下
本文討論的方法本人并沒有在實(shí)際項目中應(yīng)用過,因?yàn)槲疫€沒有遇到有這樣需要的項目,但試驗(yàn)發(fā)現(xiàn)可行。
一、我的想法來源
JavaScipt是好東西,它的出現(xiàn)讓網(wǎng)頁頁面表現(xiàn)形式更活潑,當(dāng)然好處絕不僅僅就這些,而近些年來紅紅火火的AJAX應(yīng)用更讓人開始重視JavaScipt小語言(好些程序牛人不把它看作語言,最多是腳本稱號,甚至看不起搞腳本的人)的應(yīng)用?,F(xiàn)在好些博客官網(wǎng)開放腳本權(quán)限,允許用戶自定義腳本來豐富自己的空間,特別像一些技術(shù)類專業(yè)博客,提供了相當(dāng)寬松的開發(fā)環(huán)境。但是我們也發(fā)現(xiàn)好些博客會對某些腳本方法作限制。注意,我這里說的是部分限制,如果是全部限制那是很簡單的事,直接把<script>腳本塊過濾掉就行了,但是部分限制又是如何做到的呢?
因?yàn)槲以谥暗捻椖恐袥]有遇到這樣的問題,所以也沒有作過多的深入研究,一開始只是憑感覺想到用“替換”方法。很顯然這樣的方法行不通,因?yàn)榭赡軙鲥e。比如我要禁用alert方法,現(xiàn)有下面那段代碼:
window.alert('Some message');
現(xiàn)在要讓上面那段代碼失效,只要讓alert變一下就行了,比如把它全部改成大寫ALERT,這樣又肯定會報腳本錯誤的,但還是可以用try{}catch{}把ALERT包含起來,但這對禁用語包的識別又是一大難題,而且還會有這樣的錯誤:把document.write('alert some message');中的alert也替換了。
后來我想到了方法重寫,重寫要禁用的方法,并讓它什么也不做,結(jié)果證明真的可行,但并不知道是不是一個科學(xué)的方法,我拿出來與大家共同討論一下。
二、具體實(shí)現(xiàn)
先看下面的代碼,實(shí)現(xiàn)了對“alert”,“write”兩個方法的禁用:
window.alert=function(){}
document.write=function(){}
window.alert('Alert some message');
document.write('Write some message');
看起來真的很簡單,在實(shí)際應(yīng)用的時候,把前面兩行單獨(dú)抽出來存在一個外部JS文件中,并在需要過濾JavaScript方法的頁面先加載這個JS文件(也可以在用戶編輯內(nèi)容塊的前一行加載這個腳本,這樣之前的HTML塊中我們管理員或網(wǎng)頁制作者還是可以用將要被禁用的方法),這樣之后調(diào)用被禁用的方法是不起作用的了。
注意:最后提醒一下,還要禁用部分DOM操作方法,比如remove()方法,因?yàn)橛脩艨梢杂肈OM的操作方法移除你一開始加載的那個JS文件。
一、我的想法來源
JavaScipt是好東西,它的出現(xiàn)讓網(wǎng)頁頁面表現(xiàn)形式更活潑,當(dāng)然好處絕不僅僅就這些,而近些年來紅紅火火的AJAX應(yīng)用更讓人開始重視JavaScipt小語言(好些程序牛人不把它看作語言,最多是腳本稱號,甚至看不起搞腳本的人)的應(yīng)用?,F(xiàn)在好些博客官網(wǎng)開放腳本權(quán)限,允許用戶自定義腳本來豐富自己的空間,特別像一些技術(shù)類專業(yè)博客,提供了相當(dāng)寬松的開發(fā)環(huán)境。但是我們也發(fā)現(xiàn)好些博客會對某些腳本方法作限制。注意,我這里說的是部分限制,如果是全部限制那是很簡單的事,直接把<script>腳本塊過濾掉就行了,但是部分限制又是如何做到的呢?
因?yàn)槲以谥暗捻椖恐袥]有遇到這樣的問題,所以也沒有作過多的深入研究,一開始只是憑感覺想到用“替換”方法。很顯然這樣的方法行不通,因?yàn)榭赡軙鲥e。比如我要禁用alert方法,現(xiàn)有下面那段代碼:
復(fù)制代碼 代碼如下:
window.alert('Some message');
現(xiàn)在要讓上面那段代碼失效,只要讓alert變一下就行了,比如把它全部改成大寫ALERT,這樣又肯定會報腳本錯誤的,但還是可以用try{}catch{}把ALERT包含起來,但這對禁用語包的識別又是一大難題,而且還會有這樣的錯誤:把document.write('alert some message');中的alert也替換了。
后來我想到了方法重寫,重寫要禁用的方法,并讓它什么也不做,結(jié)果證明真的可行,但并不知道是不是一個科學(xué)的方法,我拿出來與大家共同討論一下。
二、具體實(shí)現(xiàn)
先看下面的代碼,實(shí)現(xiàn)了對“alert”,“write”兩個方法的禁用:
復(fù)制代碼 代碼如下:
window.alert=function(){}
document.write=function(){}
window.alert('Alert some message');
document.write('Write some message');
看起來真的很簡單,在實(shí)際應(yīng)用的時候,把前面兩行單獨(dú)抽出來存在一個外部JS文件中,并在需要過濾JavaScript方法的頁面先加載這個JS文件(也可以在用戶編輯內(nèi)容塊的前一行加載這個腳本,這樣之前的HTML塊中我們管理員或網(wǎng)頁制作者還是可以用將要被禁用的方法),這樣之后調(diào)用被禁用的方法是不起作用的了。
注意:最后提醒一下,還要禁用部分DOM操作方法,比如remove()方法,因?yàn)橛脩艨梢杂肈OM的操作方法移除你一開始加載的那個JS文件。
相關(guān)文章
原生JS利用transform實(shí)現(xiàn)banner的無限滾動示例代碼
這篇文章主要介紹了原生JS利用transform實(shí)現(xiàn)banner的無限滾動示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
JavaScript函數(shù)式編程(Functional Programming)高階函數(shù)(Higher order fun
這篇文章主要介紹了JavaScript函數(shù)式編程(Functional Programming)高階函數(shù)(Higher order functions),結(jié)合實(shí)例形式分析了javascript函數(shù)式編程高級函數(shù)的概念、原理、用法及相關(guān)操作注意事項,需要的朋友可以參考下2019-05-05
詳解webpack與SPA實(shí)踐之開發(fā)環(huán)境搭建
這篇文章主要介紹了詳解webpack與SPA實(shí)踐之開發(fā)環(huán)境搭建,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-12-12
奉獻(xiàn)給JavaScript初學(xué)者的編寫開發(fā)的七個細(xì)節(jié)
每種語言都有它特別的地方,對于JavaScript來說,使用var就可以聲明任意類型的變量,這門腳本語言看起來很簡單,然而想要寫出優(yōu)雅的代碼卻是需要不斷積累經(jīng)驗(yàn)的。本文利列舉了JavaScript初學(xué)者應(yīng)該注意的七個細(xì)節(jié),與大家分享。2011-01-01
js實(shí)現(xiàn)的后臺左側(cè)管理菜單代碼
這篇文章主要介紹了js實(shí)現(xiàn)的后臺左側(cè)管理菜單代碼,可實(shí)現(xiàn)美觀大氣的左側(cè)折疊菜單效果,涉及JavaScript基于鼠標(biāo)事件動態(tài)操作頁面元素樣式變換的技巧,非常具有實(shí)用價值,需要的朋友可以參考下2015-09-09

