svnno****@sourc*****
svnno****@sourc*****
2011年 10月 2日 (日) 20:07:36 JST
Revision: 2969 http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=2969 Author: dhrname Date: 2011-10-02 20:07:35 +0900 (Sun, 02 Oct 2011) Log Message: ----------- a要素でSVGファイルにリンクしたとき、target属性が_selfであっても置換できるように修正 Modified Paths: -------------- branches/08x/086/org/w3c/dom/svg.js Modified: branches/08x/086/org/w3c/dom/svg.js =================================================================== --- branches/08x/086/org/w3c/dom/svg.js 2011-09-28 13:11:49 UTC (rev 2968) +++ branches/08x/086/org/w3c/dom/svg.js 2011-10-02 11:07:35 UTC (rev 2969) @@ -1744,6 +1744,7 @@ _parseFloat = parseFloat, ndoc = NAIBU.doc, oba = _doc.createElement("div"); //obaはradialGradient要素で使う + s._iframe = ifr; //_iframeプロパティはSVGAElementでリンク置換のときに扱う oba.setAttribute("id","_NAIBU_outline"); _doc.body.appendChild(oba); sp.style.margin = "-1px,0px,0px,-1px" @@ -4894,19 +4895,33 @@ var tar = evt.target; if (tar.href.baseVal.indexOf(".svg") !== -1) { //もし、リンク先がSVGファイルならば var sd = document.body, - ob; + ob, nd; + sd.lastChild.innerHTML = "<object data='" +tar.href.baseVal.split("#")[0]+ "' width='" +screen.width+ "' height='" +screen.height+ "' type='image/svg+xml'></object>"; + if (tar.target.baseVal === "_self") { + nd = tar.ownerDocument._iframe; + nd.parentNode.insertBefore(sd.lastChild.firstChild, nd); + ob = nd.nextSibling; + if (ob && (ob.tagName === "OBJECT")) { + nd.previousSibling.setAttribute("width", ob.getAttribute("width")); + nd.previousSibling.setAttribute("height", ob.getAttribute("height")); + nd.parentNode.removeChild(ob); + } + ob = NAIBU._search([nd.previousSibling]); + nd.parentNode.removeChild(nd); + } else { + sd.appendChild(sd.lastChild.firstChild); + while (sd.firstChild !== sd.lastChild) { //オブジェクト要素以外を除去 + sd.removeChild(sd.firstChild); + } + ob = NAIBU._search([sd.lastChild]); + } NAIBU.doc = new ActiveXObject("MSXML2.DomDocument"); - sd.lastChild.innerHTML = "<object data='" +tar.href.baseVal.split("#")[0]+ "' width='" +screen.width+ "' height='" +screen.height+ "' type='image/svg+xml'></object>"; - sd.appendChild(sd.lastChild.firstChild) evt.preventDefault(); - while (sd.firstChild !== sd.lastChild) { //オブジェクト要素以外を除去 - sd.removeChild(sd.firstChild); - } - ob = NAIBU._search([sd.lastChild]); ob._next = {_init: function () { document.title = ob.getSVGDocument().title; }}; ob._init(); + sd = ob = nd = void 0; } }, false); SVGURIReference.apply(this, arguments);