※ 引述《danny0838 (道可道非常道)》之銘言:
: 在下想做的是一套簡單的電子書系統,大概有幾個要求:
: 1. 使用者只需要 IE 或 Fx 等網頁瀏覽器就能執行,不需安裝額外軟體。
: 2. 承上,所以希望整套網頁系統只用到 JS, CSS, HTML, XML 之類的,
: 目前沒用過 JQuery,如果有需求會嘗試看看。
: 3. 整套系統可以全套在本機電腦上執行,也可以放在伺服器上,供使用者連線使用。
我想請教一下這個需求的用意是?
如果你要讓使用者在自己的電腦上使用,那麼以 HTML 和 Javascipt 為
基礎的 HTML Application,可以很簡單的達成你的要求。
如果你要放在伺服器上,單純的 HTML 加 Javascript 頂多讓使用者可以瀏覽而已,
如果要能編輯,甚至是你的資料檔不想讓使用者(透過輸入網址的方式)直接取得,
則必須搭配 php 等伺服器端的程式才能達成。
不管怎麼樣,硬要寫在一起,只是徒增維護和撰寫的複雜度而已。
不過如果你只是想做單純的瀏覽,不需要編刪的動作,那倒是勉強可以寫在一起。
只是取得資料檔列表的方式,伺服器端跟本機端要分開處理,其他部分倒可一起套用。
: 4. 架構大致分為
: (1) 網頁程式系統(JS, HTML, XML)
: (2) 資料檔(很多,一個檔就是一本電子書)
: 5. 流程大致為:
: 開啟程式
: ↓
: 呈現操作介面和資料檔列表
: ↓
: 使用者選取操作方式,以及資料檔 ←
: ↓ ↑
: 程式載入必要的資料檔,分析並呈現結果 →
: 問題大概有幾個:
: 1. 本程式一開始是不會讀入所有資料檔的。
: 程式開啟時,要呈現出一個列表,列出所有資料檔,讓使用者去選擇。
: 就在下所知,如果要讀取伺服器的「某資料夾下的所有檔案」,必須使用 AJAX,
在本機是可以取得自己電腦的檔案結構啦。
至於單純使用 AJAX 就可以讀取伺服器的檔案結構...
如果你這麼認為的話,可能你的觀念還要再加強一下喔。
: 但 AJAX 不能純粹在本機運作,因此不宜;
在本機的話,HTML Application 有更直接的方法可以取得檔案列表。
: 而如果要讀取本機「某資料夾下的所有檔案」,必須使用 ActiveX,
我想簡單提一下,如果 client 要動用 server 的資源,除非該資源是公開的、
透過網址就可以直接取得的,否則單靠 AJAX / Javascript 辦不到,
同時要搭配如 php 之類的程式語言才行。
而 server 要動用 client 的資源,則是靠著 JAVA 或是 ActiveX 之類的來達成。
所以看到這邊我開始有點疑惑,你的要求是程式在本機跟伺服器都能執行,
然後資料檔全部都是放在使用者的電腦上嗎?
: 但 ActiveX 不能在純粹在伺服器運作,因此也不宜。
ActiveX 本來就不是給伺服器用的。
: (另外,ActiveX 似乎只有 IE 支援)
沒錯,要跨平台、跨瀏覽器的話,請考慮用 JAVA。
: 不知以上認知是否錯誤?
: 因此,除了資料檔以外,在下是否必須另外製作一個資料檔的路徑列表?
簡單講是這樣沒錯...
: 2. 承上,在上述限制下,有什麼方法可以根據使用者的操作,
: 動態載入使用者想開啟的資料檔?
從傳統的單純超連結,到新的 AJAX 技術,都可以達到你的要求吧。
: 目前在下的做法是建立一個隱藏的 iframe 去讀資料檔,
: 但 iframe 的載入似乎需要時間,
: 無法在載入的程式碼後面立刻抓取框架內容,否則會出錯。
這邊我不是很瞭解為什麼你會選擇這樣做?
如果你是以 AJAX 做的話,步驟大概像這樣:
使用者觸發讀取某一個資料檔的事件 -> 透過 AJAX 技術取得該資料檔的內容 ->
根據某些規則(如 BBCode 轉 HTML)產生要輸出的 HTML 原始碼 ->
將這個結果放到某個 division 裡面,這樣就完成了
按照這樣來講,根本不需要用到 iframe,更不用去等待、確認讀取完成、再
取得該 frame 的內容(更何況,你打算怎麼取得整個框架的內容)。
: 另外,在下希望資料檔格式盡量簡單,讓不懂網頁語法的使用者也能自由編輯,
: 所以最好可以是 txt 或 xml...
最簡單當然是 txt,使用者程度夠的話,建議以 html 來做就可以了,
xml 我是覺得不很必要,除非你打算順便紀錄諸如文章日期等等的額外資訊。
: 在下想問的是:
: 如何讓主程式在 iframe 載入完成時,知道 iframe 已載入完全,
: 然後分析並呈現其結果?
: 或者,有比 iframe 更好的作法?
: 3. 承上,因為同一個資料檔可能被重複開啟,想請問以下何種做法最有效率最省資源:
: 1) iframe 載入後就保留,如果日後用到同一個資料檔,
: 就直接讀取對應 iframe 的內容。
: 2) iframe 載入後,把內容存到主程式下的某個變數中,並關閉 iframe,
: 如果日後用到同一個資料檔,就直接讀取對應的變數。
: 3) iframe 載入且讀完後就關閉,如果日後用到同一個資料檔,就重新載入一次。
: 4) 有比以上三者更好的方法?
我想就只需要一個 division,使用者開啟一次則讀取一次就好。
實在不需要儲存到某個變數,或是製造多個 division / iframe 存放。
我覺得你好像把所謂的「日後」想得太遠了,事實上不管如何,
使用者一關掉瀏覽器,你做的這些「快取」通通都會消失歸零,
你可以想想看,要使用者留著一個瀏覽視窗不要關閉,可以維持多久呢?
而為了做這個 cache,所造成的網頁結構複雜度、使用者記憶體耗用量、
使用者操作的順暢程度、使用感受等等,再加上撰寫相關機制以及日後
維護所花費的成本,我個人是覺得這麼做是弊大於利。
: 4. 在下想製作類似 phpBB 的 BBCode 或維基語法的自訂標籤,再用程式分析呈現,
: 以供定義和規範化電子書的格式,
: 並且可依實際需要配合樣式表做出多種變化、多種分析方式。
要做到最大的變化性,我想 HTML 會比什麼 BBCode 或是維基語法還要優秀很多。
: 目前最大障礙是,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>正文正文正文......
: 目前就卡在不知如何自動偵測標籤的不當嵌套,
: 以及偵測出來後自動複製必要的標籤,請求各位大大協助。
關於這點,恕我不同意你的觀點。
我想先請教的是,你要根據什麼來認定這個不當嵌套的內容,是要依照你
所定的規則來做修正?使用者真正想表達的效果,一定是你設想的這樣嗎?
其實瀏覽器也有自己的容錯機制,而且肯定比您自己撰寫的要來得完善,因此,
我比較傾向把這個問題交給瀏覽器解決。
所以您要做的只是將 BBCode(或是您最終決定採用的其他格式)按照正常的規則
解析成 HTML,至於這個結果是不是可接受,就交給瀏覽器來解釋。
如果最後顯示的結果可以接受那就還好,否則就是該使用者犯了連瀏覽器都
無法接受的錯誤,這樣則直接要求該使用者改善。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.165.34.174
討論串 (同標題文章)