Hatena::Groupsubtech

ういはるかぜの化学

Thursday, February 19, 2009

object 要素に param 要素がはいらない 12:14  object 要素に param 要素がはいらない - ういはるかぜの化学 を含むブックマーク はてなブックマーク -  object 要素に param 要素がはいらない - ういはるかぜの化学

そもそもIEだとobject要素の下にはparam要素しか入らない仕様のようです。でもコード的にはparam要素突っ込んでるじゃん!というアレなのですがjQuery的にはまず append が

append: function() {
	return this.domManip(arguments, true, function(elem){
		if (this.nodeType == 1)
			this.appendChild( elem );
	});
},

で、その中の domManip が

domManip: function( args, table, callback ) {
	if ( this[0] ) {
		var fragment = (this[0].ownerDocument || this[0]).createDocumentFragment(),
			scripts = jQuery.clean( args, (this[0].ownerDocument || this[0]), fragment ),
			first = fragment.firstChild,
			extra = this.length > 1 ? fragment.cloneNode(true) : fragment;

		if ( first )
			for ( var i = 0, l = this.length; i < l; i++ )
				callback.call( root(this[i], first), i > 0 ? extra.cloneNode(true) : fragment );
		
		if ( scripts )
			jQuery.each( scripts, evalScript );
	}

	return this;
	
	function root( elem, cur ) {
		return table && jQuery.nodeName(elem, "table") && jQuery.nodeName(cur, "tr") ?
			(elem.getElementsByTagName("tbody")[0] ||
			elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
			elem;
	}
}

となっていてどうもDocumentFragmentを作ってそれに入れてから実際のオブジェクトに追加されるらしく、object要素にDocumentFragmentを突っ込もうとして死ということみたい。(param要素はargsからfirstに代入されて、root()でDocumentFragmentにappendChildされています)

同じく代替のa要素もobject要素の下には突っ込めませんのでエラーになりますね(これはDocumentFragmentありなしにかかわらず)。

じゃあどうすれば、というとまあ…jQuery使ってる以上そうなのでHTMLを文字列連結とかで作って突っ込んでくださいとか…。

あ、でもこれ1.3.1で調べてみたからちょっと違う問題なのかもと今更気づきましたがこだわりません。

トラックバック - http://subtech.g.hatena.ne.jp/mayuki/20090219