XHTMLでdocument.createElementNSを使うメモ
すっかり忘れてたけど、とりあえず、DOCTYPEをXHTMLにしただけではDOM的にnamespaceが付くワケじゃないということです。
以前のOperaのエラーの原因の1つもそれっぽい。
とはいえ、Operaのエラーはnamepaceがドキュメントのと一致しないという理由もあったようだが、、、orz
2000ってどこから出てきたんだろう。。。
最低限、MIME-TypeにApplicatin/xmlとかtext/xmlにしないとXHTMLでdocument.createElementNSは使えない。
つまり、一般的なtext/htmlではnamespaceはDOM的に使えないらしい。
ただし、MIME-Typeに*/xmlを使うと、IE6は表示出来ない。
とりあえず、こんな感じで動いてるっぽい。
getAttributeNS()の使い方はわかってない。現状、全ブラウザで ”(実質false)が返るらしい。
namespaceのURIは決めうち。
W3CのXMLのページを見てみると、
http://www.w3.org/TR/REC-html40
というのが出てくるので、たぶんURIは1つだけじゃないと思う。
ドキュメントから取得して、それをデフォルトのURIに出来るようにした方がよさげ。
function HasNameSpace(){
var nsURI='http://www.w3.org/1999/xhtml';
var doc=document.documentElement;
if(!doc){
return false;
}
var cType=doc.contentType||'';
if(!document.createElementNS || !doc.getAttributeNS){
return false;
}
if(cType.indexOf('xml')!=-1) ||
document.xmlVersion!=null ||
doc.getAttributeNS(nsURI, 'xmlns')
{
return true;
}
return false;
}
http://www3.tokai.or.jp/janboon/javascript/disc/text1.html
この辺が参考になりました。お礼を込めてリンク。
自分では見ないかもしれない備忘録。
ていうか、createElementNSでググったらまともなことを書いてないこのサイトがトップってどうなん!?