[Sie-announce] SIEコード [2838] 画像フレームの幅と高さをonloadの段階で決定させるようにした

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2011年 7月 15日 (金) 20:43:48 JST


Revision: 2838
          http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=2838
Author:   dhrname
Date:     2011-07-15 20:43:48 +0900 (Fri, 15 Jul 2011)

Log Message:
-----------
画像フレームの幅と高さをonloadの段階で決定させるようにした

Modified Paths:
--------------
    branches/08x/082/org/w3c/dom/svg.js

Modified: branches/08x/082/org/w3c/dom/svg.js
===================================================================
--- branches/08x/082/org/w3c/dom/svg.js	2011-07-15 11:31:02 UTC (rev 2837)
+++ branches/08x/082/org/w3c/dom/svg.js	2011-07-15 11:43:48 UTC (rev 2838)
@@ -1781,8 +1781,6 @@
       tar.setAttributeNodeNS(att);
     }
     str = attr = null;
-    ifr.setAttribute("width", objw);
-    ifr.setAttribute("height", objh);
     dcp.style.width = tview.width+ "px";
     dcp.style.height = tview.height+ "px";
     dcp.coordsize = tview.width+ " " +tview.height;
@@ -6172,7 +6170,8 @@
  */
 NAIBU._main = (function() {
   stlog = new STLog(true);
-  var xmlhttp; //XMLHttpオブジェクトを生成
+  var xmlhttp,         //XMLHttpオブジェクトを生成
+      _doc = document; //documentのエイリアスを作成
   try {
     xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
   } catch (e) {
@@ -6191,19 +6190,19 @@
   }
   NAIBU.xmlhttp = xmlhttp;
   var nd;
-  if (("namespaces" in document) && !document.namespaces["v"]) {
+  if (("namespaces" in _doc) && !_doc.namespaces["v"]) {
     NAIBU.doc = new ActiveXObject("MSXML2.DomDocument");
     nd = NAIBU.doc;
-    document.namespaces.add("v","urn:schemas-microsoft-com:vml");
-    document.namespaces.add("o","urn:schemas-microsoft-com:office:office");
-    var st = document.createStyleSheet();
+    _doc.namespaces.add("v","urn:schemas-microsoft-com:vml");
+    _doc.namespaces.add("o","urn:schemas-microsoft-com:office:office");
+    var st = _doc.createStyleSheet();
     var vmlUrl = "behavior: url(#default#VML);display: inline-block;} "; //inline-blockはIEのバグ対策
     st.cssText = "v\\:rect{" +vmlUrl+ "v\\:image{" +vmlUrl+ "v\\:fill{" +vmlUrl+ "v\\:stroke{" +vmlUrl+ "o\\:opacity2{" +vmlUrl
       + "dn\\:defs{display:none}"
       + "v\\:group{text-indent:0px;position:relative;width:100%;height:100%;" +vmlUrl
       + "v\\:shape{width:100%;height:100%;" +vmlUrl;
   }
-  var ary = document.getElementsByTagName("script");
+  var ary = _doc.getElementsByTagName("script");
   //全script要素をチェックして、type属性がimage/svg+xmlならば、中身をSVGとして処理する
   for (var i=0; ary[i]; ++i) {
     var ai = ary[i],
@@ -6237,17 +6236,22 @@
   NAIBU.doc = nd;
   nd = ary = null;
   if (xmlhttp && NAIBU.isMSIE) {
-    if (!!document.createElementNS && !!document.createElementNS( "http://www.w3.org/2000/svg", "svg").createSVGRect) { //IE9ならば
+    if (!!_doc.createElementNS && !!_doc.createElementNS( "http://www.w3.org/2000/svg", "svg").createSVGRect) { //IE9ならば
     } else { //IE6-8ならば
-      var ob = document.getElementsByTagName("object"),
-          em = document.getElementsByTagName("embed"),
+      var ob = _doc.getElementsByTagName("object"),
+          em = _doc.getElementsByTagName("embed"),
           i = 0,
           s=[],
-          ifr, obi;
+          ifr, obi, n;
       for (;ob[i];++i) {
         obi = ob[i];
         s[s.length] = new GetSVGDocument(obi);
-        ifr = document.createElement("iframe");
+        ifr = _doc.createElement("iframe");
+        ifr.style.background = "black";
+        n = obi.getAttribute("width");
+        n && ifr.setAttribute("width", n);
+        n = obi.getAttribute("height");
+        n && ifr.setAttribute("height", n);
         ifr.marginWidth = ifr.marginHeight = "0px"; //このマージン設定がないと、全体がずれてしまう
         ifr.scrolling = "no";
         ifr.frameBorder = "0";
@@ -6259,13 +6263,15 @@
       for (i=0;em[i];++i) {
         obi = em[i];
         s[s.length] = new GetSVGDocument(obi);
-        ifr = document.createElement("iframe");
+        ifr = _doc.createElement("iframe");
+        ifr.style.background = "black";
+        n = obi.getAttribute("width");
+        n && ifr.setAttribute("width", n);
+        n = obi.getAttribute("height");
+        n && ifr.setAttribute("height", n);
         ifr.marginWidth = ifr.marginHeight = "0px"; //このマージン設定がないと、全体がずれてしまう
         ifr.scrolling = "no";
         ifr.frameBorder = "0";
-        /*iframe要素を使って、描画のプロセスを分離する
-         *したがって、_docはdocumentとは別のオブジェクトとなる
-         */
         obi.parentNode.insertBefore(ifr, obi);
       }
       ob = em = i = obi = ifr = null;
@@ -6280,17 +6286,17 @@
       s = null;
     }
   } else {
-    var ob = document.getElementsByTagName("object");
+    var ob = _doc.getElementsByTagName("object");
     for (var i=0;i<ob.length;++i) {
       if (ob[i].contentDocument) {
         NAIBU._fontSearchURI({target:{ownerDocument:ob[i].contentDocument}});
       } else if (ob[i].getSVGDocument) {
-        ob[i].getSVGDocument().documentElement.addEventListener("SVGLoad", NAIBU._fontSearchURI, false);
+        ob[i].getSVGDocument()._docElement.addEventListener("SVGLoad", NAIBU._fontSearchURI, false);
       } else {
       }
     }
   }
-  xmlhttp = null;
+  xmlhttp = _doc = null;
 });
 NAIBU.addEvent("load", NAIBU._main);
 NAIBU.utf16 = function ( /*string*/ s)  {




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