svnno****@sourc*****
svnno****@sourc*****
2011年 9月 7日 (水) 22:59:22 JST
Revision: 2930 http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=2930 Author: dhrname Date: 2011-09-07 22:59:22 +0900 (Wed, 07 Sep 2011) Log Message: ----------- image要素の画像読み込みを高速化 Modified Paths: -------------- branches/08x/085/org/w3c/dom/svg.js Modified: branches/08x/085/org/w3c/dom/svg.js =================================================================== --- branches/08x/085/org/w3c/dom/svg.js 2011-09-07 13:58:41 UTC (rev 2929) +++ branches/08x/085/org/w3c/dom/svg.js 2011-09-07 13:59:22 UTC (rev 2930) @@ -1039,65 +1039,65 @@ tar._tar.src = uri; tar = xmlhttp = null; } else if ((uri.indexOf("http:") > -1) || (uri.indexOf(".") === 0)){ - if (tar.localName === "image") { + if ((tar.localName === "image") && (uri.indexOf(".svg") === -1)) { tar._tar.src = uri; } else { /*ここの_svgload_limitedは、リンクを読み込んだ後でSVGLoadイベントを実行させるという遅延処理で必要*/ tar.ownerDocument.documentElement._svgload_limited++; - } - xmlhttp.open("GET", uri, false); - xmlhttp.setRequestHeader("X-Requested-With", "XMLHttpRequest"); - xmlhttp.onreadystatechange = function() { - if ((xmlhttp.readyState === 4) && (xmlhttp.status === 200)) { - var type = xmlhttp.getResponseHeader('Content-Type') || "text", - doc, str, ele, ev; - if ((type.indexOf("text") > -1) || (type.indexOf("xml") > -1) || (type.indexOf("script") > -1)) { //ファイルがtext形式である場合 - /*responseXMLを使うと、時々、空のデータを返すことがあるため(原因は不明)、 - *ここでは、responseTextを用いる - */ - /*script要素とstyle要素は、 - *_textプロパティに読み込んだテキストを格納しておく - *それら以外は、_instanceプロパティにDOMツリーを格納しておく - */ - if (tar.localName !== "script" && tar.localName !== "style") { - doc = new ActiveXObject("MSXML2.DomDocument"); - str = xmlhttp.responseText.replace(/!DOCTYPE/,"!--").replace(/(dtd">|\]>)/,"-->"); - NAIBU.doc.async = false; - NAIBU.doc.validateOnParse = false; - NAIBU.doc.resolveExternals = false; - NAIBU.doc.preserveWhiteSpace = false; - doc.loadXML(str); - ele = doc.documentElement; - tar._instance = tar.ownerDocument.importNode(ele, true); - if (id) { - tar._instance = tar._instance.ownerDocument.getElementById(id); + xmlhttp.open("GET", uri, false); + xmlhttp.setRequestHeader("X-Requested-With", "XMLHttpRequest"); + xmlhttp.onreadystatechange = function() { + if ((xmlhttp.readyState === 4) && (xmlhttp.status === 200)) { + var type = xmlhttp.getResponseHeader('Content-Type') || "text", + doc, str, ele, ev; + if ((type.indexOf("text") > -1) || (type.indexOf("xml") > -1) || (type.indexOf("script") > -1)) { //ファイルがtext形式である場合 + /*responseXMLを使うと、時々、空のデータを返すことがあるため(原因は不明)、 + *ここでは、responseTextを用いる + */ + /*script要素とstyle要素は、 + *_textプロパティに読み込んだテキストを格納しておく + *それら以外は、_instanceプロパティにDOMツリーを格納しておく + */ + if (tar.localName !== "script" && tar.localName !== "style") { + doc = new ActiveXObject("MSXML2.DomDocument"); + str = xmlhttp.responseText.replace(/!DOCTYPE/,"!--").replace(/(dtd">|\]>)/,"-->"); + NAIBU.doc.async = false; + NAIBU.doc.validateOnParse = false; + NAIBU.doc.resolveExternals = false; + NAIBU.doc.preserveWhiteSpace = false; + doc.loadXML(str); + ele = doc.documentElement; + tar._instance = tar.ownerDocument.importNode(ele, true); + if (id) { + tar._instance = tar._instance.ownerDocument.getElementById(id); + } + } else { + tar._text = xmlhttp.responseText; } - } else { - tar._text = xmlhttp.responseText; + } else if (!!tar._tar) { + tar._tar.src = uri; } - } else if (!!tar._tar) { - tar._tar.src = uri; - } - /*S_LoadイベントとはSIE独自のイベント。 - *XLink言語によって、リンク先のコンテンツが読み込まれた時点で発火する - */ - ev = tar.ownerDocument.createEvent("SVGEvents"); - ev.initEvent("S_Load", false, false); - tar.dispatchEvent(ev); - tar.ownerDocument.documentElement._svgload_limited--; - /*すべてのリンクが読み込みを終了した場合、SVGLoadイベントを発火*/ - if (tar.ownerDocument.documentElement._svgload_limited < 0) { + /*S_LoadイベントとはSIE独自のイベント。 + *XLink言語によって、リンク先のコンテンツが読み込まれた時点で発火する + */ ev = tar.ownerDocument.createEvent("SVGEvents"); - ev.initEvent("SVGLoad", false, false); - tar.ownerDocument.documentElement.dispatchEvent(ev); + ev.initEvent("S_Load", false, false); + tar.dispatchEvent(ev); + tar.ownerDocument.documentElement._svgload_limited--; + /*すべてのリンクが読み込みを終了した場合、SVGLoadイベントを発火*/ + if (tar.ownerDocument.documentElement._svgload_limited < 0) { + ev = tar.ownerDocument.createEvent("SVGEvents"); + ev.initEvent("SVGLoad", false, false); + tar.ownerDocument.documentElement.dispatchEvent(ev); + } + tar = type = doc = str = ev = null; + /*IEのメモリリーク対策として、空関数を入力*/ + xmlhttp.onreadystatechange = NAIBU.emptyFunction; + xmlhttp = null; } - tar = type = doc = str = ev = null; - /*IEのメモリリーク対策として、空関数を入力*/ - xmlhttp.onreadystatechange = NAIBU.emptyFunction; - xmlhttp = null; - } - }; - xmlhttp.send(null); + }; + xmlhttp.send(null); + } } } tar.ownerDocument.documentElement._svgload_limited--;