2009-06-18 51 views
0

我管理学术软件项目的系统,以及其他项目,允许项目提供与Trac bug跟踪器/ wiki /源浏览器实例集成的网页。这个想法是,用户可以自由设计他们喜欢的主要页面(他们真的很喜欢这样),但是有一些便利/品牌特性(如常用的导航元素)和顶部的(不显眼的)链接栏,可以链接回主页和其他托管项目。为了获得更好的单词,我使用“包装”来描述将nav元素和链接栏插入到文档中。我知道,我知道:超载的术语。对不起,如果你期待一个回车问题;)AJAX安全的方式来后处理/“包装”任意网页?

多年来,这个系统已经很好地工作,由用户定义的Apache 2 OutputFilter实现的文本/ HTML的“包装”:随着HTML流离开服务器,我将输入HTML解析为一个DOM,如果需要将树标准化一点,然后插入适当的额外元素。有点吝啬,但我能找到的最好的方式,到目前为止它运作良好。但是,我现在想将Trac系统升级到0.11,其中一些整洁的AJAX用于懒惰地呈现目录树而不重新加载:效果是AJAX HTML流被Apache滤镜修改,因此每次打开目录时都会添加新的“顶级酒吧”和导航家具。这显然非常糟糕,我宁愿我的用户也可以使用AJAX(如果他们想要的话),而不是在特定于Trac中的“忽略目录浏览HTTP请求”系统。

我想知道的是,是否有人有更好的方式来这样的后处理应用到网页等方式尤其将本质发挥更好一点与AJAX,而不限制做什么我的用户的自由,他们希望与他们的网页。谢谢!

+0

澄清:解析,修改等不是问题......这一点解决了,在我的情况下,与Python脚本和一些HTML文件库。真正的问题是a)是否有比我描述的更好的方法来完成通用的HTML后期处理?和b)是否有一种强大的方法来检测请求“是”AJAX还是“正常”? – andybuckley 2009-06-19 10:11:00

回答

0

随着HTML流离开服务器,我将输入HTML解析为DOM,根据需要标准化树,然后插入适当的额外元素。

我并不熟悉这种技术,所以我必须问清楚究竟是什么解析?一种语言,或者是一套规则还是什么?如果它是一种语言,你可以检查请求的标题,如果它是一个AJAX请求,你可以简单地返回流,而不是添加导航。

+0

可以用任何语言编写过滤器,并且可以像CGI脚本可以访问的那样公开相同的环境变量。就我个人而言,我使用Python BeautifulSoup和HTML Tidy API的组合来强大地解析和修改HTML,但这是问题解决的部分:难点在于过滤器适用于*每个* HTTP请求。 HTTP头可能是可用的:HTTP头的可靠方面是否指示请求是否基于AJAX? – andybuckley 2009-06-19 10:08:18

0

您使用哪种语言?

你将有一个很难与DOM这样做,因为它很容易改变..

我敢说..考虑使用正则表达式来代替。

+0

DOM不是问题:解析和修改位解决了(并且稳定了2年以上)。问题在于确定哪些HTTP请求是“正常的”,因此应该被过滤,哪些是AJAX,应该单独放置。 – andybuckley 2009-06-19 18:17:30

相关问题