Re: [問題] 一個 JS 的系統問題

看板Ajax作者 (道可道非常道)時間15年前 (2009/01/15 20:44), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串4/7 (看更多)
※ 引述《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)
文章代碼(AID): #19Ro-RZX (Ajax)
討論串 (同標題文章)
文章代碼(AID): #19Ro-RZX (Ajax)