浏览 2817 次
锁定老帖子 主题:请教Mozilla自定义标签的解析的问题。
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-04-14
一个一年多前的老问题: 我在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 在这里问问大家,有没有谁考虑过这个问题呢? 最好有解决办法,那就不胜感激了,^_^ 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-04-15
就是要serve为xhtml,才能识别为xml。
|
|
返回顶楼 | |
发表时间: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 |
|
返回顶楼 | |
发表时间:2008-04-15
hax 写道 就是要serve为xhtml,才能识别为xml。
那是当能,但是实际运用中又不能接受,那样依赖变化太大,比如tagName都变成小写了,以前的很多代码都会又问题。 |
|
返回顶楼 | |
发表时间:2008-04-15
其实这个也不管命名空间的事情。
直接用 <mytag> <div>Mozilla 系列浏览器中,这个div不会解析为 mytag的子元素</div> </mytag> 也是一样的问题 |
|
返回顶楼 | |
发表时间:2008-04-15
改为xhtml后,div还有其它一些元素的显示效果和html貌似会不一样。
好像这种情况下会有问题,一个div宽100%,里面一个table,table宽100%,这个div要模仿浏览器滚动条功能,就是overflow-y这种效果。 这时div的宽度会超过浏览器屏幕的宽度,造成出现浏览器横向滚动条。 不知道是不是代码哪个地方没写对还是什么问题。 |
|
返回顶楼 | |
发表时间:2008-04-17
fyting 写道 嗯,我正好也遇到相同的问题,response里的Content-Type要设置为text/xml或者application/xhtml+xml,否则FireFox不会正确识别为xml,你可以用FireBug的HTML功能看出两者区别,没有正确识别时会显示出一个属性:“_moz-userdefined”,郁闷无比……如果要靠服务器端修改代码,对客户端框架而言是个致命影响。
还有一个方法就是把文件后缀名改为xhtml。这样在本地会识别为xhtml,而多数Web server也会自动加上正确的content-type。 |
|
返回顶楼 | |
发表时间:2008-04-17
jindw 写道 其实这个也不管命名空间的事情。
直接用 <mytag> <div>Mozilla 系列浏览器中,这个div不会解析为 mytag的子元素</div> </mytag> 也是一样的问题 IE也不会。不过IE貌似可以没来由的加上一句 document.createElement('mytag') 来改变这一行为。 |
|
返回顶楼 | |
发表时间:2008-04-17
HexUzHoNG 写道 改为xhtml后,div还有其它一些元素的显示效果和html貌似会不一样。
好像这种情况下会有问题,一个div宽100%,里面一个table,table宽100%,这个div要模仿浏览器滚动条功能,就是overflow-y这种效果。 这时div的宽度会超过浏览器屏幕的宽度,造成出现浏览器横向滚动条。 不知道是不是代码哪个地方没写对还是什么问题。 可能因为div的scrollbar不算在content之内,所以超过了width。 |
|
返回顶楼 | |
发表时间:2008-04-25
hax 写道 jindw 写道 其实这个也不管命名空间的事情。
直接用 <mytag> <div>Mozilla 系列浏览器中,这个div不会解析为 mytag的子元素</div> </mytag> 也是一样的问题 IE也不会。不过IE貌似可以没来由的加上一句 document.createElement('mytag') 来改变这一行为。 我在处理IE的时候,确实发现了一些问题(具体都不太记得了,呵呵)。不过,可以通过一些技巧改变。 给指定命名空间的元素,绑上一个空的hta,就可以正常工作了。 |
|
返回顶楼 | |