Re: [問題] 一個 JS 的系統問題
※ 引述《chweng ()》之銘言:
: ※ 引述《danny0838 (道可道非常道)》之銘言:
: : 在下想做的是一套簡單的電子書系統,大概有幾個要求:
: : 1. 使用者只需要 IE 或 Fx 等網頁瀏覽器就能執行,不需安裝額外軟體。
: : 2. 承上,所以希望整套網頁系統只用到 JS, CSS, HTML, XML 之類的,
: : 目前沒用過 JQuery,如果有需求會嘗試看看。
: : 3. 整套系統可以全套在本機電腦上執行,也可以放在伺服器上,供使用者連線使用。
: 我想請教一下這個需求的用意是?
資料檔就像網頁一樣,集中放在某個相對路徑下,
在 server 上就是取 server 上的資料檔;
在本機就是取本機的資料檔。
伺服器上的情況就是,程式和資料檔全在伺服器上,
使用者可自由瀏覽,(當然,無法修改)。
基本上完全自由,直接輸入網址就能存取。
本機的情況是,把程式和資料檔打包給使用者下載,
可以離線使用,也可以自行新增、修改資料檔,甚至程式,打造屬於自己的「電子書」。
為減少維護負擔,所以不想分別寫二套程式。
為減少伺服器負擔,所以不想寫 serverlet(更主要原因是 serverlet 不能本機跑),
server 只放資料檔和程式檔,剩下全丟給使用者的瀏覽器跑。
整體來說,資料檔其實就像一個個網頁,
程式的用途在於提供搜尋、分析、比對、切換樣式等功能。
: : 問題大概有幾個:
: : 1. 本程式一開始是不會讀入所有資料檔的。
: : 程式開啟時,要呈現出一個列表,列出所有資料檔,讓使用者去選擇。
: : 就在下所知,如果要讀取伺服器的「某資料夾下的所有檔案」,必須使用 AJAX,
: 在本機是可以取得自己電腦的檔案結構啦。
: 至於單純使用 AJAX 就可以讀取伺服器的檔案結構...
: 如果你這麼認為的話,可能你的觀念還要再加強一下喔。
所以 AJAX 不能讀 server 的檔案架構,是嗎?
: : 但 ActiveX 不能在純粹在伺服器運作,因此也不宜。
: ActiveX 本來就不是給伺服器用的。
: : (另外,ActiveX 似乎只有 IE 支援)
: 沒錯,要跨平台、跨瀏覽器的話,請考慮用 JAVA。
想確認您指的是 JAVA 還是 Javascript?
不管是 AJAX 或 HTA 或 OOXX,只要放在本機和在放伺服器上都能跑,
而且大部分瀏覽器都能正常執行,(就是前面的三點需求),在下就可以接受。
: : 不知以上認知是否錯誤?
: : 因此,除了資料檔以外,在下是否必須另外製作一個資料檔的路徑列表?
: 簡單講是這樣沒錯...
所以如果要能放在伺服器上也能放在本機跑,基本上資料檔路徑表要另外自己做?
: : 2. 承上,在上述限制下,有什麼方法可以根據使用者的操作,
: : 動態載入使用者想開啟的資料檔?
: 從傳統的單純超連結,到新的 AJAX 技術,都可以達到你的要求吧。
: : 目前在下的做法是建立一個隱藏的 iframe 去讀資料檔,
: : 但 iframe 的載入似乎需要時間,
: : 無法在載入的程式碼後面立刻抓取框架內容,否則會出錯。
: 這邊我不是很瞭解為什麼你會選擇這樣做?
: 如果你是以 AJAX 做的話,步驟大概像這樣:
: 使用者觸發讀取某一個資料檔的事件 -> 透過 AJAX 技術取得該資料檔的內容 ->
: 根據某些規則(如 BBCode 轉 HTML)產生要輸出的 HTML 原始碼 ->
: 將這個結果放到某個 division 裡面,這樣就完成了
: 按照這樣來講,根本不需要用到 iframe,更不用去等待、確認讀取完成、再
: 取得該 frame 的內容(更何況,你打算怎麼取得整個框架的內容)。
因為目前尚未成功讓 AJAX 在本機跑...
而用 iframe 可以達成放在本機或放在伺服器的需求...
簡言之,如果 AJAX 可以純本機執行、跨瀏覽器執行,
在下就考慮改用,而且在下的確是比較希望能用 AJAX...。
: : 另外,在下希望資料檔格式盡量簡單,讓不懂網頁語法的使用者也能自由編輯,
: : 所以最好可以是 txt 或 xml...
: 最簡單當然是 txt,使用者程度夠的話,建議以 html 來做就可以了,
: xml 我是覺得不很必要,除非你打算順便紀錄諸如文章日期等等的額外資訊。
目前其實算是假 xml,除了宣告標籤和一二層標籤以外,
整個內容實際上還是自訂語法的純文字檔。
實際是透過 xsl 插入 html 標籤和分析用的程式檔,然後讓瀏覽器讀取。
不用 txt 是因為 txt 直接開啟是看到原始碼,而不是分析過語法的結果;
而 html 需要在資料檔裡插入太多可能會變動的標籤,將來萬一要改會改到死;
所以目前是用 xml,如此可以直接點二下開啟,並自動載入分析程式。
目前也考慮用 txt,但主要障礙是在下還無法本機跑 AJAX,
若用 iframe 開 txt,就無法知道何時完成載入(若是 xml 就可以插語法通知主程式)。
: : 3. 承上,因為同一個資料檔可能被重複開啟,想請問以下何種做法最有效率最省資源:
: : 1) iframe 載入後就保留,如果日後用到同一個資料檔,
: : 就直接讀取對應 iframe 的內容。
: : 2) iframe 載入後,把內容存到主程式下的某個變數中,並關閉 iframe,
: : 如果日後用到同一個資料檔,就直接讀取對應的變數。
: : 3) iframe 載入且讀完後就關閉,如果日後用到同一個資料檔,就重新載入一次。
: : 4) 有比以上三者更好的方法?
: 我想就只需要一個 division,使用者開啟一次則讀取一次就好。
: 實在不需要儲存到某個變數,或是製造多個 division / iframe 存放。
: 我覺得你好像把所謂的「日後」想得太遠了,事實上不管如何,
: 使用者一關掉瀏覽器,你做的這些「快取」通通都會消失歸零,
: 你可以想想看,要使用者留著一個瀏覽視窗不要關閉,可以維持多久呢?
: 而為了做這個 cache,所造成的網頁結構複雜度、使用者記憶體耗用量、
: 使用者操作的順暢程度、使用感受等等,再加上撰寫相關機制以及日後
: 維護所花費的成本,我個人是覺得這麼做是弊大於利。
這是一個電子書程式,並建有搜尋功能,
搜尋檔案時自然必須先載入,
在關閉瀏覽器前,在下預期使用者在使用的前前後後,會頻繁重複使用檔案,
而因為開啟檔案時,必須交由程式分析語法,再呈現內容,
如果沒有緩存機制,每次開啟同樣的檔案都重新分析一次語法似乎頗浪費資源...
而如果使用緩存機制,似乎會增加記憶體的負擔...
所以目前也不確定緩存是否比不緩存好。
: : 4. 在下想製作類似 phpBB 的 BBCode 或維基語法的自訂標籤,再用程式分析呈現,
: : 以供定義和規範化電子書的格式,
: : 並且可依實際需要配合樣式表做出多種變化、多種分析方式。
: 要做到最大的變化性,我想 HTML 會比什麼 BBCode 或是維基語法還要優秀很多。
這問題就像為什麼網路論壇和維基百科不開放 HTML...
因為在下不預期使用者會懂 HTML 和 CSS,
採用自製語法就是為了讓使用者能方便地自由編輯。
另外還有一個原因是讓程式能分析「文意」,
例如「註解」、「標題」、「附註」等,能夠採用特定的格式,
: : 目前最大障礙是,HTML 標籤只容許巢狀,而不容許交叉。
: : 假設在下的自訂標籤語法如下:
: : [h1]標題[/h1]
: : 正文正文正文[note]註解註解[/note]正文正文正文......
: : 這段文字會被程式轉換為:
: : <h1>標題</h1><br/><br/>正文正文正文<span class="note">註解註解</span>
: : 正文正文正文......
: : (中間沒有換行,是為了BBS顯示才換行的)
: : 但如果有人寫成:
: : [h1]標[note]題[/h1]
: : 正文正文正文註解註解[/note]正文正文正文......
: : 轉換後就會得到錯誤的結果......
: : 在下希望程式能自動偵測這類的問題,並且自動修正為巢狀標籤:
: : <h1>標<span class="note">題</span></h1><br/><br/><span class="note">
: : 正文正文正文註解註解</span>正文正文正文......
: : 目前就卡在不知如何自動偵測標籤的不當嵌套,
: : 以及偵測出來後自動複製必要的標籤,請求各位大大協助。
: 關於這點,恕我不同意你的觀點。
: 我想先請教的是,你要根據什麼來認定這個不當嵌套的內容,是要依照你
: 所定的規則來做修正?使用者真正想表達的效果,一定是你設想的這樣嗎?
: 其實瀏覽器也有自己的容錯機制,而且肯定比您自己撰寫的要來得完善,因此,
: 我比較傾向把這個問題交給瀏覽器解決。
認定的方式就是範例寫的那樣,很明顯意思是用 [note] 框整段。
另一個常見的情況就是,「換行」通常會被編譯成<p></p>,
如果使用者把標籤跨段使用,很容易造成不適當的嵌套。
說了這麼多,其實在下要的只是,如果有一段文字:
[tag]我是一段文字[/tag]
要如何用 js 語法得知「一段文字」的所有母標籤?
感謝您的回覆(_ _)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.25.118.142
※ 編輯: danny0838 來自: 163.25.118.142 (01/15 20:45)
※ 編輯: danny0838 來自: 163.25.118.142 (01/15 20:46)
※ 編輯: danny0838 來自: 163.25.118.142 (01/15 20:48)
討論串 (同標題文章)