本文討論的方法本人並沒有在實際項目中應用過,因為我還沒有遇到有這樣需要的項目,但試驗發現可行。
一、我的想法來源
JavaScipt是好東西,它的出現讓網頁頁面表現形式更活潑,當然好處絕不僅僅就這些,而近多年來紅紅火火的AJAX應用程式更讓人開始重視JavaScipt小語言(好些程式牛人不把它看作語言,最多是腳本稱號,甚至看不起搞腳本的人)的應用。現在好些博客官網開放腳本權限,允許用戶自訂腳本來豐富自己的空間,特別像一些技術類專業博客,提供了相當寬鬆的開發環境。但是我們也發現好些部落格會對某些腳本方法作限制。注意,我這裡說的是部分限制,如果是全部限制那是很簡單的事,直接把<script>腳本塊過濾掉就行了,但是部分限制又是如何做到的呢? <br><br>因為我在之前的專案中沒有遇到這樣的問題,所以也沒有作過多的深入研究,一開始只是憑感覺想到用「替換」方法。很顯然這樣的方法行不通,因為可能會出錯。例如我要停用alert方法,現有下面那段程式碼: <BR><div class="codetitle"><span><a style="CURSOR: pointer" data="67741" class="copybut" id="copybut67741" onclick="doCopy('code67741')"><U>複製程式碼 程式碼如下:<div class="codebody" id="code67741"> <><BR>程式碼如下:<BR> <><BR>程式碼如下:<br><br> <><br>程式碼如下:<br><STRONG> window.alert('Some message'); <br><br> <BR>現在要讓上面那段程式碼失效,只要讓alert變一下就行了,比如把它全部改成大寫ALERT,這樣又肯定會報腳本錯誤的,但還是可以用try{}catch{}把ALERT包含起來,但這對禁用語包的辨識又是一大難題,而且還會有這樣的錯誤:把document.write('alert some message');中的alert也替換了。 <div class="codetitle"><span>後來我想到了方法重寫,重寫要禁用的方法,並讓它什麼也不做,結果證明真的可行,但並不知道是不是一個科學的方法,我拿出來與大家共同討論一下。 <a style="CURSOR: pointer" data="59455" class="copybut" id="copybut59455" onclick="doCopy('code59455')"><U>二、具體實作 先看下面的程式碼,實作了對「alert”,「write」兩個方法的停用: <div class="codebody" id="code59455"><BR> <BR><br><br>複製程式碼<BR><BR> 程式碼如下:<BR><br> <br>window.alert=function(){} <STRONG>document.write=function( ){} <🎜>window.alert('Alert some message'); <🎜>document.write('Write some message'); <🎜><🎜> <🎜>看起來真的很簡單,在實際應用的時候,把前面兩行單獨抽出來存在一個外部JS檔案中,並在需要過濾JavaScript方法的頁面先載入這個JS檔案(也可以在使用者編輯內容區塊的前一行載入這個腳本,這樣之前的HTML區塊中我們管理員或網頁製作者還是可以用將要被停用的方法),這樣之後呼叫被停用的方法是不起作用的了。 <🎜><🎜><🎜>注意:<🎜>最後提醒一下,也要停用部分DOM操作方法,例如remove()方法,因為使用者可以用DOM的操作方法移除你一開始載入的那個JS文件。</script>