论坛首页 Web前端技术论坛

请教Mozilla自定义标签的解析的问题。

浏览 2817 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-04-14  
今天重新考虑JSI装饰引擎的事情。

一个一年多前的老问题:

我在html中嵌入如下自定义标记:
<ns:test> <div>test</div> </ns:test>
Mozilla 浏览器将解析为: <ns:test></ns:test> <div>test</div>
而不是我们想当然的:<ns:test> <div>test</div> </ns:test>

这样一来,JSI的装饰引擎就无法装饰这些div,table之类的块元素(现在的办法是在他们外面套一个span,极不优雅)

Google了半天没有找到任何解决办法。

倒是找到一个与我同样的问题:
http://groups.google.com/group/mozilla.dev.apps.firefox/browse_thread/thread/921eb0451e5ed66c

在这里问问大家,有没有谁考虑过这个问题呢?
最好有解决办法,那就不胜感激了,^_^
   发表时间:2008-04-15  
就是要serve为xhtml,才能识别为xml。
0 请登录后投票
   发表时间:2008-04-15  
嗯,我正好也遇到相同的问题,response里的Content-Type要设置为text/xml或者application/xhtml+xml,否则FireFox不会正确识别为xml,你可以用FireBug的HTML功能看出两者区别,没有正确识别时会显示出一个属性:“_moz-userdefined”,郁闷无比……如果要靠服务器端修改代码,对客户端框架而言是个致命影响。

我看decorator-support.js里面有这样的代码:
DecoratorEngine.prototype.buildTree = function(root){
  var tree = {children:[]};
  if(this.tagExp){
    this.htmlWalk(root,tree);
    return tree.children;
  }
  if(BrowserInfo.isIE()){
    var decoratorElements = root.all.urns(dns);
  }else if(document.documentElement.tagName == 'html' //xhtml
    && document.documentElement.namespaceURI == 'http://www.w3.org/1999/xhtml'){
    var decoratorElements = document.getElementsByTagNameNS(dns,'*');
  }else{
    this.domWalk(root,tree);
    return tree.children;
  }

并且FF里面也完全正常,代码还没看懂,原来都是通过加span来解决的吗?

另外,我研究了下Netvibes,他的UWA规范是这样的:
    <widget:preferences>
      <preference name="townName" type="text" label="Town" defaultValue="" />
    </widget:preferences>

结果他最后直接使用了document.getElementsByTagName('preference')


有没有什么办法可以解决这个问题呢,用namespace是一件看起来很不错的事情……找到篇MSDN的blog,也在抱怨,不过距离现在又有一年多了,不知道有没有新的变化http://blogs.msdn.com/dthorpe/archive/2006/12/18/namespaces-in-html-too-much-trouble-to-bother-with.aspx
还找到这篇没有来得及看,得明天来解决了。http://blogs.nitobi.com/dave/?p=131
15 请登录后投票
   发表时间:2008-04-15  
hax 写道
就是要serve为xhtml,才能识别为xml。

那是当能,但是实际运用中又不能接受,那样依赖变化太大,比如tagName都变成小写了,以前的很多代码都会又问题。
0 请登录后投票
   发表时间:2008-04-15  
其实这个也不管命名空间的事情。
直接用
<mytag>
  <div>Mozilla 系列浏览器中,这个div不会解析为 mytag的子元素</div>
</mytag>

也是一样的问题
0 请登录后投票
   发表时间:2008-04-15  
改为xhtml后,div还有其它一些元素的显示效果和html貌似会不一样。

好像这种情况下会有问题,一个div宽100%,里面一个table,table宽100%,这个div要模仿浏览器滚动条功能,就是overflow-y这种效果。

这时div的宽度会超过浏览器屏幕的宽度,造成出现浏览器横向滚动条。

不知道是不是代码哪个地方没写对还是什么问题。
0 请登录后投票
   发表时间:2008-04-17  
fyting 写道
嗯,我正好也遇到相同的问题,response里的Content-Type要设置为text/xml或者application/xhtml+xml,否则FireFox不会正确识别为xml,你可以用FireBug的HTML功能看出两者区别,没有正确识别时会显示出一个属性:“_moz-userdefined”,郁闷无比……如果要靠服务器端修改代码,对客户端框架而言是个致命影响。


还有一个方法就是把文件后缀名改为xhtml。这样在本地会识别为xhtml,而多数Web server也会自动加上正确的content-type。
0 请登录后投票
   发表时间:2008-04-17  
jindw 写道
其实这个也不管命名空间的事情。
直接用
<mytag>
  <div>Mozilla 系列浏览器中,这个div不会解析为 mytag的子元素</div>
</mytag>

也是一样的问题



IE也不会。不过IE貌似可以没来由的加上一句 document.createElement('mytag') 来改变这一行为。
0 请登录后投票
   发表时间:2008-04-17  
HexUzHoNG 写道
改为xhtml后,div还有其它一些元素的显示效果和html貌似会不一样。

好像这种情况下会有问题,一个div宽100%,里面一个table,table宽100%,这个div要模仿浏览器滚动条功能,就是overflow-y这种效果。

这时div的宽度会超过浏览器屏幕的宽度,造成出现浏览器横向滚动条。

不知道是不是代码哪个地方没写对还是什么问题。



可能因为div的scrollbar不算在content之内,所以超过了width。
0 请登录后投票
   发表时间:2008-04-25  
hax 写道
jindw 写道
其实这个也不管命名空间的事情。
直接用
<mytag>
  <div>Mozilla 系列浏览器中,这个div不会解析为 mytag的子元素</div>
</mytag>

也是一样的问题



IE也不会。不过IE貌似可以没来由的加上一句 document.createElement('mytag') 来改变这一行为。


我在处理IE的时候,确实发现了一些问题(具体都不太记得了,呵呵)。不过,可以通过一些技巧改变。
给指定命名空间的元素,绑上一个空的hta,就可以正常工作了。
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics