2008-04-14
请教Mozilla自定义标签的解析的问题。
关键字: jsi
今天重新考虑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
在这里问问大家,有没有谁考虑过这个问题呢?
最好有解决办法,那就不胜感激了,^_^
一个一年多前的老问题:
我在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
在这里问问大家,有没有谁考虑过这个问题呢?
最好有解决办法,那就不胜感激了,^_^


评论
直接用
<mytag>
<div>Mozilla 系列浏览器中,这个div不会解析为 mytag的子元素</div>
</mytag>
也是一样的问题
IE也不会。不过IE貌似可以没来由的加上一句 document.createElement('mytag') 来改变这一行为。
我在处理IE的时候,确实发现了一些问题(具体都不太记得了,呵呵)。不过,可以通过一些技巧改变。
给指定命名空间的元素,绑上一个空的hta,就可以正常工作了。
好像这种情况下会有问题,一个div宽100%,里面一个table,table宽100%,这个div要模仿浏览器滚动条功能,就是overflow-y这种效果。
这时div的宽度会超过浏览器屏幕的宽度,造成出现浏览器横向滚动条。
不知道是不是代码哪个地方没写对还是什么问题。
可能因为div的scrollbar不算在content之内,所以超过了width。
直接用
<mytag>
<div>Mozilla 系列浏览器中,这个div不会解析为 mytag的子元素</div>
</mytag>
也是一样的问题
IE也不会。不过IE貌似可以没来由的加上一句 document.createElement('mytag') 来改变这一行为。
还有一个方法就是把文件后缀名改为xhtml。这样在本地会识别为xhtml,而多数Web server也会自动加上正确的content-type。
好像这种情况下会有问题,一个div宽100%,里面一个table,table宽100%,这个div要模仿浏览器滚动条功能,就是overflow-y这种效果。
这时div的宽度会超过浏览器屏幕的宽度,造成出现浏览器横向滚动条。
不知道是不是代码哪个地方没写对还是什么问题。
直接用
<mytag>
<div>Mozilla 系列浏览器中,这个div不会解析为 mytag的子元素</div>
</mytag>
也是一样的问题
那是当能,但是实际运用中又不能接受,那样依赖变化太大,比如tagName都变成小写了,以前的很多代码都会又问题。
我看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