svnno****@sourc*****
svnno****@sourc*****
2011年 8月 25日 (木) 20:40:02 JST
Revision: 2893 http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=2893 Author: dhrname Date: 2011-08-25 20:40:02 +0900 (Thu, 25 Aug 2011) Log Message: ----------- SVGURIReferenceインターフェースと、関連する要素を改良して、SVGLoadイベントが2度起きるバグを修正 Modified Paths: -------------- branches/08x/084/org/w3c/dom/svg.js Modified: branches/08x/084/org/w3c/dom/svg.js =================================================================== --- branches/08x/084/org/w3c/dom/svg.js 2011-08-23 11:49:39 UTC (rev 2892) +++ branches/08x/084/org/w3c/dom/svg.js 2011-08-25 11:40:02 UTC (rev 2893) @@ -1036,14 +1036,19 @@ doc = tar.ownerDocument; ele = doc.getElementById(id); tar._instance = ele; - ev = doc.createEvent("SVGEvents"); - ev.initEvent("SVGLoad", false, false); + ev = tod.createEvent("SVGEvents"); + ev.initEvent("S_Load", false, false); tar.dispatchEvent(ev); + tar = xmlhttp = null; } else if (uri.indexOf("data:") > -1) { tar._tar.src = uri; + tar = xmlhttp = null; } else if ((uri.indexOf("http:") > -1) || (uri.indexOf(".") === 0)){ if (tar.localName === "image") { tar._tar.src = uri; + } else { + /*ここの_svgload_limitedは、リンクを読み込んだ後でSVGLoadイベントを実行させるという遅延処理で必要*/ + tar.ownerDocument.documentElement._svgload_limited++; } xmlhttp.open("GET", uri, false); xmlhttp.setRequestHeader("X-Requested-With", "XMLHttpRequest"); @@ -1078,19 +1083,27 @@ } else if (!!tar._tar) { tar._tar.src = uri; } - ev = tar.ownerDocument.createEvent("SVGEvents"); - ev.initEvent("SVGLoad", false, false); + ev = tod.createEvent("SVGEvents"); + ev.initEvent("S_Load", false, false); tar.dispatchEvent(ev); - type = doc = str = ev = null; + tar.ownerDocument.documentElement._svgload_limited--; + if (tar.ownerDocument.documentElement._svgload_limited < 0) { + ev = tod.createEvent("SVGEvents"); + ev.initEvent("SVGLoad", false, false); + tod.documentElement.dispatchEvent(ev); + } + tar = type = doc = str = ev = null; /*IEのメモリリーク対策として、空関数を入力*/ xmlhttp.onreadystatechange = NAIBU.emptyFunction; + xmlhttp = null; } }; xmlhttp.send(null); } } + tar.ownerDocument.documentElement._svgload_limited--; } - evt = tar = base = href = egbase = ep = b = lh = uri = xmlhttp = ui = id = doc = ele = ev = show= null; + evt = base = href = egbase = ep = b = lh = uri = ui = id = doc = ele = ev = show= null; }, false); tar = evt = null; }, false); @@ -1533,7 +1546,7 @@ } evt.target.setAttributeNS("http://www.w3.org/1999/xlink", "xlink:show", "embed"); }, false); - this.addEventListener("SVGLoad", function(evt){ + this.addEventListener("S_Load", function(evt){ var tar = evt.target, style = tar.ownerDocument.defaultView.getComputedStyle(tar, ""), fontSize = parseFloat(style.getPropertyValue("font-size")), @@ -1952,7 +1965,7 @@ } evt = null; }, false); - this.addEventListener("SVGLoad", function(evt){ + this.addEventListener("S_Load", function(evt){ var tar = evt.target, sheet = tar.sheet, styleText = tar._text, @@ -1977,7 +1990,6 @@ } sheet.cssRules[sheet.cssRules.length] = scri; } - tod.documentElement._svgload_limited--; tod.documentElement.addEventListener("DOMNodeInsertedIntoDocument", function(evt) { var tar = evt.target, doc = tar.ownerDocument, @@ -1995,11 +2007,6 @@ } tar = doc = rules = null; }, true); - if (tod.documentElement._svgload_limited < 0) { - evt = tod.createEvent("SVGEvents"); - evt.initEvent("SVGLoad", false, false); - tod.documentElement.dispatchEvent(evt); - } tar = evt = style = sheet = styleText = tod = i = rules = rli = null; }, false); this.addEventListener("DOMNodeInserted", function(evt){ @@ -2014,7 +2021,7 @@ var tar = evt.target; if ((evt.eventPhase === Event.AT_TARGET) && !tar.getAttributeNodeNS("http://www.w3.org/1999/xlink", "xlink:href")) { var evtt = tar.ownerDocument.createEvent("SVGEvents"); - evtt.initEvent("SVGLoad", false, false); + evtt.initEvent("S_Load", false, false); evt.currentTarget.dispatchEvent(evtt); } tar = evt = null; @@ -4872,19 +4879,13 @@ } evt = null; }, false); - this.addEventListener("SVGLoad", function(evt){ + this.addEventListener("S_Load", function(evt){ var tar = evt.target, script = tar._text; var tod = tar.ownerDocument; NAIBU._temp_doc = tod; script = script.replace(/function\s+(\w+)/g, "$1 = function"); script = "(function(document){" +script+ "})(NAIBU._temp_doc);" eval(script); - tod.documentElement._svgload_limited--; - if (tod.documentElement._svgload_limited < 0) { - evt = tod.createEvent("SVGEvents"); - evt.initEvent("SVGLoad", false, false); - tod.documentElement.dispatchEvent(evt); - } tar = evt = script = null; }, false); this.addEventListener("DOMNodeInserted", function(evt){ @@ -4899,7 +4900,7 @@ var tar = evt.target; if (evt.eventPhase === Event.AT_TARGET && !tar.getAttributeNodeNS("http://www.w3.org/1999/xlink", "xlink:href")) { var evtt = tar.ownerDocument.createEvent("SVGEvents"); - evtt.initEvent("SVGLoad", false, false); + evtt.initEvent("S_Load", false, false); evt.currentTarget.dispatchEvent(evtt); } tar = evt = null; @@ -5843,7 +5844,7 @@ evt.target.ownerDocument.documentElement._svgload_limited-- evt.target.setAttributeNS("http://www.w3.org/1999/xlink", "xlink:show", "embed"); }, false); - this.addEventListener("SVGLoad", function(evt){ + this.addEventListener("S_Load", function(evt){ var tar = evt.target, tpp = tar.parentNode.parentNode.parentNode; if (tpp.localName === "defs") { tpp = tar.parentNode.parentNode; //tppをfont-face要素としておく