[Sie-announce] SIEコード [2893] SVGURIReferenceインターフェースと、関連する要素を改良して、SVGLoadイベントが2度起きるバグを修正

Back to archive index

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要素としておく




Sie-announce メーリングリストの案内
Back to archive index