作者danny0838 (道可道非常道)
看板Ajax
标题Re: [问题] 一个 JS 的系统问题
时间Thu Jan 15 20:44:10 2009
※ 引述《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)