某個js前輩的常常跟我說,他寫js都會用IIFE封裝起來,
其目的是為了讓USER沒辦法從console裡面拿到變數、function。
我大概明白這樣子做,比較有保護,不過我不太懂的是,這樣子會造成那些可能的風險呢?
舉例來說,也許我今天的網站只是提供一個計算字數的工具,
又或者只是一個時鐘頁面,是否這種東西就沒有那麼一定要封裝起來呢?
畢竟就算給你拿到參數,讓你破壞掉頁面,似乎也就只影響到client端那邊的東西。
所以我想要大概歸類,有哪些網站或應用會「必須封裝」,我個人認為:
應該是有資料要跑後端的比較需要擔心。
靜態單機的頁面,就算我寫個遊戲,讓人家拿到變數任意改變,似乎也沒有太大的關係。
我知道這是個好習慣,
但如果我只是寫個靜態網站,就算不封裝,實質上應該也沒有風險!?!?
我分享一個JS封裝的程式B4X案例
1.B4X BANano+BANanoElement(Umbrella JS) 封裝JS+HTML
這是我製作的說明影片(有一系列喔)
https://www.youtube.com/watch?v=fH8fvy7P4Vs
B4X 介紹在 https://www.b4x.com/
2.我希望利用Basic(B4X)優點來撰寫網頁程式
未來有一個新的小範例影片(我還未製作出來)
https://b234.top/ 帳號密碼都是1
你可以看原始碼都是HTML+JS
底下的程式碼.我先列出來給你看.
不是看不到JS.而是我封裝起來了..變成物件class.
利用物件的優點...
Sub Class_Globals
'Private fx As JFX
Private BANano As BANano 'ignore
Dim page As xPage 'HTML Page物件
Dim mdl As xModal 'BS物件
Dim uname As xTextBox 'BS物件
Dim upwd As xTextBox 'BS物件
End Sub
'Initializes the object. You can add parameters to this method if needed.
Public Sub Initialize
End Sub
public Sub show
page.Initialize("body",Me)
page.Root.Empty
page.Root.AddLoginFormV1("Login")
mdl = page.Root.AddModal("mdlLogin")
uname = page.Root.GetElement("xTextBox","uname")
upwd = page.Root.GetElement("xTextBox","upwd")
End Sub
Sub Login_Yes_click(e As BANanoEvent)
If uname.Value.trim = "" Or upwd.Value.trim = "" Then
mdl.Message = "登入失敗!!帳號/密碼必須輸入"
mdl.Show
Return
End If
Dim headers As Map
headers.Initialize
headers.put("Content-Type", "application/json")
headers.Put("Authorization", "BANBasic " & BANano.ToBase64(uname.value & ":" & upwd.value))
Dim res As String = BANano.CallAjaxWait("http://localhost/api","POST","json", $""$, False, headers)
Log(res)
'{"BANanoStatus": 801, "BANToken": "zJVAI1eYfjJh+UN1p80Bp/IiW60+hKMguZxT4T6Rp6ZnsbEFpinYBw==", "BANExpires": 90}
'{"BANanoStatus": 800,"Message": "ERROR!!驗證失敗"}
Dim json As BANanoJSONParser
json.Initialize(res)
Dim m As Map = json.NextObject
Dim CheckStatus As Int = m.GetDefault("BANanoStatus",0)
Log("res狀態: "&CheckStatus)
Select Case CheckStatus
Case 801 '登入成功
Dim expires As Int = m.GetDefault("BANExpires", 0)
BANano.SetCookie("BANanoDemoCookie", m.GetDefault("BANToken", ""), $"{"expires": ${expires}}"$)
Dim p As PageMain '主頁面
p.Initialize
p.show
Case Else ' login is not ok
Log("登入失敗!!")
mdl.Message = "登入失敗!!"
mdl.Show
End Select
End Sub
所以阿!!最後.變成我都用B4X去寫程式碼?!!!
底下是一位網友製作出來的SithasoDaisy..給你參考
https://www.b4x.com/android/forum/threads/sithasodaisy-tailwindcss-webapps-using-b4x.143950/
SithasoDaisy: TailwindCss WebApps using B4x
補充補充一下:
未來還有一個新的小範例影片(我還未製作出來)...
謝謝很精彩,有點複雜,我慢慢研究。感謝分享
沒想到.評為最佳.那我就詳細講
按照底下步驟做.軟體免費.
1.安裝B4J.內有安裝說明
https://www.b4x.com/b4j.html
安裝起來.IDE-->File-->New-->UI (選擇一個簡單的範例)
IDE-->RUN 執行編譯...跑看看...
這步驟可以了.才做下面的
2.介紹怎麼使用 BANano,產生Web網站
https://www.youtube.com/watch?v=U3tbVdJGmHM
影片下方有介紹怎麼 額外安裝BANano
比那 android IDE 容易太多了
0.B4X 能寫桌面win/Mac OS/Linux
安卓手機/iphone/網頁.... 這些可以慢慢去玩
其實,這個東西跟你之前問的「臭長程式碼」那一篇,本質是一樣的道理。
在那一篇中,我有說到了其實那個作法等同物件化的前身處理作做。
這只是一種物件封裝化。
但一樣就如那一篇說的。這樣的做法並沒有所謂的好與不好,重要及不重要。
一切還是得看功能性而定。
就如單純1+1的程式碼,你將其封裝「加1」
這樣就太過矯往過正。
但如果是封裝了一個「計算機」裏面包含了所有的運算子。這樣就不錯。
封裝程式碼,並不一定是為了風險及安全性。
其也包含了可讀性、可利用性、可組合性。
看事情並不能單看一面來看待。