作者chweng ()
看板Ajax
标题Re: [问题] 一个 JS 的系统问题
时间Thu Jan 15 18:37:47 2009
※ 引述《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