[Sie-announce] SIEコード [2801] ifrmae要素を使って、描画をサンドボックス化

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2011年 6月 28日 (火) 22:42:47 JST


Revision: 2801
          http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=2801
Author:   dhrname
Date:     2011-06-28 22:42:47 +0900 (Tue, 28 Jun 2011)

Log Message:
-----------
ifrmae要素を使って、描画をサンドボックス化

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

Modified: branches/08x/081/org/w3c/dom/svg.js
===================================================================
--- branches/08x/081/org/w3c/dom/svg.js	2011-06-26 10:49:29 UTC (rev 2800)
+++ branches/08x/081/org/w3c/dom/svg.js	2011-06-28 13:42:47 UTC (rev 2801)
@@ -1690,8 +1690,27 @@
      *ここでは、responseTextを用いる
      */
     var dsd = new Date();
+    var ifr = document.createElement("iframe");
+    ifr.marginWidth= "0px";
+    ifr.marginHeight= "0px";
+    ifr.scrolling = "no";
+    ifr.frameBorder = "0";
+    document.body.appendChild(ifr);
+    var _doc = ifr.contentWindow.document;
+    _doc.write("");
+    _doc.close(); // これがないと document.body は null になる
+    if (("namespaces" in _doc) && !_doc.namespaces["v"]) {
+      _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;
+    }
+    _doc.body.style.backgroundColor = document.body.currentStyle.backgroundColor;
     var str = this.xmlhttp.responseText,
-        _doc = document,
         objei = this._tar,
         s = DOMImplementation.createDocument("http://www.w3.org/2000/svg", "svg"),
         tar = s.documentElement,
@@ -1761,11 +1780,14 @@
       tar.setAttributeNodeNS(att);
     }
     str = attr = null;
+    ifr.style.width = tview.width+3+ "px";
+    ifr.style.height = tview.height+3+ "px";
     dcp.style.width = tview.width+ "px";
     dcp.style.height = tview.height+ "px";
     dcp.coordsize = tview.width+ " " +tview.height;
     sp.appendChild(dcp);
-    objei.parentNode.insertBefore(sp, objei);
+    _doc.body.appendChild(sp);
+    objei.parentNode.insertBefore(ifr, objei);
     dcp.appendChild(sdt);
     while (fi) { //子ノードを検索して、子供がいれば、importNodeメソッドを再帰的に実行する
       n = s.importNode(fi, true);




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