JavaScript で動的に <canvas> 要素や <SVG> 要素を生成して、使えるかどうか中身をチェックするプログラムを書いてみた。
⇒ Checker for HTML Canvas and Inline SVG
iPhone 3GS + iOS 4.3 の出力結果。
Checker for HTML Canvas and Inline SVG
Canvas Available: true
Inline SVG Available: true
[Canvas Infomation]
height: 150
width: 300
outerHTML:
className:
innerText:
id:
title:
lang:
dir:
innerHTML:
contentEditable: false
tabIndex: -1
draggable: false
outerText:
children: [object HTMLCollection]
isContentEditable: false
style: [object CSSStyleDeclaration]
clientWidth: 0
scrollWidth: 0
offsetWidth: 0
offsetLeft: 0
clientTop: 0
lastElementChild: null
offsetParent: null
nextElementSibling: null
tagName: CANVAS
previousElementSibling: null
childElementCount: 0
scrollLeft: 0
firstElementChild: null
clientLeft: 0
offsetHeight: 0
clientHeight: 0
offsetTop: 0
scrollTop: 0
scrollHeight: 0
previousSibling: null
parentNode: null
lastChild: null
baseURI: null
firstChild: null
nodeValue: null
textContent:
nodeType: 1
nodeName: CANVAS
prefix: null
childNodes: [object NodeList]
nextSibling: null
attributes: [object NamedNodeMap]
ownerDocument: [object HTMLDocument]
namespaceURI: http://www.w3.org/1999/xhtml
localName: canvas
parentElement: null
getContext: function getContext() { [native code] }
toDataURL: function toDataURL() { [native code] }
insertAdjacentElement: function insertAdjacentElement() { [native code] }
insertAdjacentHTML: function insertAdjacentHTML() { [native code] }
insertAdjacentText: function insertAdjacentText() { [native code] }
querySelector: function querySelector() { [native code] }
webkitMatchesSelector: function webkitMatchesSelector() { [native code] }
hasAttribute: function hasAttribute() { [native code] }
getAttributeNode: function getAttributeNode() { [native code] }
getAttributeNS: function getAttributeNS() { [native code] }
getElementsByTagNameNS: function getElementsByTagNameNS() { [native code] }
getElementsByClassName: function getElementsByClassName() { [native code] }
removeAttributeNS: function removeAttributeNS() { [native code] }
querySelectorAll: function querySelectorAll() { [native code] }
contains: function contains() { [native code] }
getClientRects: function getClientRects() { [native code] }
scrollByPages: function scrollByPages() { [native code] }
setAttributeNode: function setAttributeNode() { [native code] }
setAttributeNS: function setAttributeNS() { [native code] }
hasAttributeNS: function hasAttributeNS() { [native code] }
blur: function blur() { [native code] }
scrollIntoViewIfNeeded: function scrollIntoViewIfNeeded() { [native code] }
setAttribute: function setAttribute() { [native code] }
scrollByLines: function scrollByLines() { [native code] }
getElementsByTagName: function getElementsByTagName() { [native code] }
removeAttribute: function removeAttribute() { [native code] }
setAttributeNodeNS: function setAttributeNodeNS() { [native code] }
getAttribute: function getAttribute() { [native code] }
removeAttributeNode: function removeAttributeNode() { [native code] }
getAttributeNodeNS: function getAttributeNodeNS() { [native code] }
focus: function focus() { [native code] }
scrollIntoView: function scrollIntoView() { [native code] }
getBoundingClientRect: function getBoundingClientRect() { [native code] }
hasAttributes: function hasAttributes() { [native code] }
NOTATION_NODE: 12
CDATA_SECTION_NODE: 4
isSupported: function isSupported() { [native code] }
ELEMENT_NODE: 1
DOCUMENT_POSITION_DISCONNECTED: 1
isEqualNode: function isEqualNode() { [native code] }
ENTITY_NODE: 6
TEXT_NODE: 3
ENTITY_REFERENCE_NODE: 5
DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: 32
DOCUMENT_FRAGMENT_NODE: 11
cloneNode: function cloneNode() { [native code] }
dispatchEvent: function dispatchEvent() { [native code] }
PROCESSING_INSTRUCTION_NODE: 7
isDefaultNamespace: function isDefaultNamespace() { [native code] }
insertBefore: function insertBefore() { [native code] }
removeChild: function removeChild() { [native code] }
hasChildNodes: function hasChildNodes() { [native code] }
addEventListener: function addEventListener() { [native code] }
DOCUMENT_POSITION_PRECEDING: 2
normalize: function normalize() { [native code] }
compareDocumentPosition: function compareDocumentPosition() { [native code] }
DOCUMENT_TYPE_NODE: 10
COMMENT_NODE: 8
replaceChild: function replaceChild() { [native code] }
DOCUMENT_POSITION_FOLLOWING: 4
removeEventListener: function removeEventListener() { [native code] }
ATTRIBUTE_NODE: 2
DOCUMENT_POSITION_CONTAINED_BY: 16
DOCUMENT_NODE: 9
DOCUMENT_POSITION_CONTAINS: 8
appendChild: function appendChild() { [native code] }
isSameNode: function isSameNode() { [native code] }
lookupPrefix: function lookupPrefix() { [native code] }
lookupNamespaceURI: function lookupNamespaceURI() { [native code] }
[Inline SVG Infomation]
systemLanguage: [object SVGStringList]
externalResourcesRequired: [object SVGAnimatedBoolean]
currentTranslate: [object SVGPoint]
width: [object SVGAnimatedLength]
viewBox: [object SVGAnimatedRect]
pixelUnitToMillimeterX: 0.2645833194255829
y: [object SVGAnimatedLength]
screenPixelToMillimeterX: 0.2645833194255829
currentScale: 1
x: [object SVGAnimatedLength]
viewport: [object SVGRect]
useCurrentView: false
xmllang:
pixelUnitToMillimeterY: 0.2645833194255829
className: [object SVGAnimatedString]
farthestViewportElement: null
height: [object SVGAnimatedLength]
screenPixelToMillimeterY: 0.2645833194255829
requiredExtensions: [object SVGStringList]
contentStyleType: text/css
contentScriptType: text/ecmascript
requiredFeatures: [object SVGStringList]
xmlspace: default
style: [object CSSStyleDeclaration]
nearestViewportElement: null
preserveAspectRatio: [object SVGAnimatedPreserveAspectRatio]
zoomAndPan: 2
viewportElement: null
ownerSVGElement: null
id:
xmlbase:
clientWidth: 0
scrollWidth: 0
offsetWidth: 0
offsetLeft: 0
clientTop: 0
lastElementChild: null
offsetParent: null
nextElementSibling: null
tagName: svg
previousElementSibling: null
childElementCount: 0
scrollLeft: 0
firstElementChild: null
clientLeft: 0
offsetHeight: 0
clientHeight: 0
offsetTop: 0
scrollTop: 0
scrollHeight: 0
previousSibling: null
parentNode: null
lastChild: null
baseURI: null
firstChild: null
nodeValue: null
textContent:
nodeType: 1
nodeName: svg
prefix: null
childNodes: [object NodeList]
nextSibling: null
attributes: [object NamedNodeMap]
ownerDocument: [object HTMLDocument]
namespaceURI: http://www.w3.org/2000/svg
localName: svg
parentElement: null
createSVGNumber: function createSVGNumber() { [native code] }
getCurrentTime: function getCurrentTime() { [native code] }
getIntersectionList: function getIntersectionList() { [native code] }
unsuspendRedraw: function unsuspendRedraw() { [native code] }
suspendRedraw: function suspendRedraw() { [native code] }
checkEnclosure: function checkEnclosure() { [native code] }
getPresentationAttribute: function getPresentationAttribute() { [native code] }
hasExtension: function hasExtension() { [native code] }
getEnclosureList: function getEnclosureList() { [native code] }
animationsPaused: function animationsPaused() { [native code] }
forceRedraw: function forceRedraw() { [native code] }
SVG_ZOOMANDPAN_UNKNOWN: 0
SVG_ZOOMANDPAN_MAGNIFY: 2
createSVGLength: function createSVGLength() { [native code] }
unsuspendRedrawAll: function unsuspendRedrawAll() { [native code] }
getBBox: function getBBox() { [native code] }
getCTM: function getCTM() { [native code] }
createSVGRect: function createSVGRect() { [native code] }
SVG_ZOOMANDPAN_DISABLE: 1
checkIntersection: function checkIntersection() { [native code] }
createSVGTransformFromMatrix: function createSVGTransformFromMatrix() { [native code] }
unpauseAnimations: function unpauseAnimations() { [native code] }
setCurrentTime: function setCurrentTime() { [native code] }
createSVGPoint: function createSVGPoint() { [native code] }
pauseAnimations: function pauseAnimations() { [native code] }
deselectAll: function deselectAll() { [native code] }
createSVGAngle: function createSVGAngle() { [native code] }
createSVGMatrix: function createSVGMatrix() { [native code] }
createSVGTransform: function createSVGTransform() { [native code] }
getScreenCTM: function getScreenCTM() { [native code] }
getTransformToElement: function getTransformToElement() { [native code] }
querySelector: function querySelector() { [native code] }
webkitMatchesSelector: function webkitMatchesSelector() { [native code] }
hasAttribute: function hasAttribute() { [native code] }
getAttributeNode: function getAttributeNode() { [native code] }
getAttributeNS: function getAttributeNS() { [native code] }
getElementsByTagNameNS: function getElementsByTagNameNS() { [native code] }
getElementsByClassName: function getElementsByClassName() { [native code] }
removeAttributeNS: function removeAttributeNS() { [native code] }
querySelectorAll: function querySelectorAll() { [native code] }
contains: function contains() { [native code] }
getClientRects: function getClientRects() { [native code] }
scrollByPages: function scrollByPages() { [native code] }
setAttributeNode: function setAttributeNode() { [native code] }
setAttributeNS: function setAttributeNS() { [native code] }
hasAttributeNS: function hasAttributeNS() { [native code] }
blur: function blur() { [native code] }
scrollIntoViewIfNeeded: function scrollIntoViewIfNeeded() { [native code] }
setAttribute: function setAttribute() { [native code] }
scrollByLines: function scrollByLines() { [native code] }
getElementsByTagName: function getElementsByTagName() { [native code] }
removeAttribute: function removeAttribute() { [native code] }
setAttributeNodeNS: function setAttributeNodeNS() { [native code] }
getAttribute: function getAttribute() { [native code] }
removeAttributeNode: function removeAttributeNode() { [native code] }
getAttributeNodeNS: function getAttributeNodeNS() { [native code] }
focus: function focus() { [native code] }
scrollIntoView: function scrollIntoView() { [native code] }
getBoundingClientRect: function getBoundingClientRect() { [native code] }
hasAttributes: function hasAttributes() { [native code] }
isSupported: function isSupported() { [native code] }
isEqualNode: function isEqualNode() { [native code] }
cloneNode: function cloneNode() { [native code] }
dispatchEvent: function dispatchEvent() { [native code] }
isDefaultNamespace: function isDefaultNamespace() { [native code] }
insertBefore: function insertBefore() { [native code] }
removeChild: function removeChild() { [native code] }
hasChildNodes: function hasChildNodes() { [native code] }
addEventListener: function addEventListener() { [native code] }
normalize: function normalize() { [native code] }
compareDocumentPosition: function compareDocumentPosition() { [native code] }
replaceChild: function replaceChild() { [native code] }
removeEventListener: function removeEventListener() { [native code] }
appendChild: function appendChild() { [native code] }
isSameNode: function isSameNode() { [native code] }
lookupPrefix: function lookupPrefix() { [native code] }
lookupNamespaceURI: function lookupNamespaceURI() { [native code] }
NOTATION_NODE: 12
CDATA_SECTION_NODE: 4
ELEMENT_NODE: 1
DOCUMENT_POSITION_DISCONNECTED: 1
ENTITY_NODE: 6
TEXT_NODE: 3
ENTITY_REFERENCE_NODE: 5
DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: 32
DOCUMENT_FRAGMENT_NODE: 11
PROCESSING_INSTRUCTION_NODE: 7
DOCUMENT_POSITION_PRECEDING: 2
DOCUMENT_TYPE_NODE: 10
COMMENT_NODE: 8
DOCUMENT_POSITION_FOLLOWING: 4
ATTRIBUTE_NODE: 2
DOCUMENT_POSITION_CONTAINED_BY: 16
DOCUMENT_NODE: 9
DOCUMENT_POSITION_CONTAINS: 8
iPhone 3GS + iOS 5.0 の出力結果。
Checker for HTML Canvas and Inline SVG
Canvas Available: true
Inline SVG Available: true
[Canvas Infomation]
height: 150
width: 300
outerHTML:
spellcheck: true
id:
title:
lang:
classList:
className:
innerText:
dir:
innerHTML:
contentEditable: inherit
tabIndex: -1
draggable: false
outerText:
hidden: false
children: [object HTMLCollection]
isContentEditable: false
style: [object CSSStyleDeclaration]
dataset: [object DOMStringMap]
clientWidth: 0
scrollWidth: 0
offsetWidth: 0
offsetLeft: 0
clientTop: 0
lastElementChild: null
offsetParent: null
nextElementSibling: null
tagName: CANVAS
previousElementSibling: null
childElementCount: 0
scrollLeft: 0
firstElementChild: null
clientLeft: 0
offsetHeight: 0
clientHeight: 0
offsetTop: 0
scrollTop: 0
scrollHeight: 0
previousSibling: null
parentNode: null
lastChild: null
baseURI: null
firstChild: null
nodeValue: null
textContent:
nodeType: 1
nodeName: CANVAS
prefix: null
childNodes: [object NodeList]
nextSibling: null
attributes: [object NamedNodeMap]
ownerDocument: [object HTMLDocument]
namespaceURI: http://www.w3.org/1999/xhtml
localName: canvas
parentElement: null
getContext: function getContext() { [native code] }
toDataURL: function toDataURL() { [native code] }
insertAdjacentElement: function insertAdjacentElement() { [native code] }
insertAdjacentHTML: function insertAdjacentHTML() { [native code] }
insertAdjacentText: function insertAdjacentText() { [native code] }
querySelector: function querySelector() { [native code] }
webkitMatchesSelector: function webkitMatchesSelector() { [native code] }
hasAttribute: function hasAttribute() { [native code] }
getAttributeNode: function getAttributeNode() { [native code] }
getAttributeNS: function getAttributeNS() { [native code] }
getElementsByTagNameNS: function getElementsByTagNameNS() { [native code] }
getElementsByClassName: function getElementsByClassName() { [native code] }
removeAttributeNS: function removeAttributeNS() { [native code] }
querySelectorAll: function querySelectorAll() { [native code] }
contains: function contains() { [native code] }
getClientRects: function getClientRects() { [native code] }
scrollByPages: function scrollByPages() { [native code] }
setAttributeNode: function setAttributeNode() { [native code] }
setAttributeNS: function setAttributeNS() { [native code] }
hasAttributeNS: function hasAttributeNS() { [native code] }
blur: function blur() { [native code] }
scrollIntoViewIfNeeded: function scrollIntoViewIfNeeded() { [native code] }
setAttribute: function setAttribute() { [native code] }
scrollByLines: function scrollByLines() { [native code] }
getElementsByTagName: function getElementsByTagName() { [native code] }
removeAttribute: function removeAttribute() { [native code] }
setAttributeNodeNS: function setAttributeNodeNS() { [native code] }
getAttribute: function getAttribute() { [native code] }
removeAttributeNode: function removeAttributeNode() { [native code] }
getAttributeNodeNS: function getAttributeNodeNS() { [native code] }
focus: function focus() { [native code] }
scrollIntoView: function scrollIntoView() { [native code] }
getBoundingClientRect: function getBoundingClientRect() { [native code] }
hasAttributes: function hasAttributes() { [native code] }
NOTATION_NODE: 12
CDATA_SECTION_NODE: 4
isSupported: function isSupported() { [native code] }
ELEMENT_NODE: 1
DOCUMENT_POSITION_DISCONNECTED: 1
isEqualNode: function isEqualNode() { [native code] }
ENTITY_NODE: 6
TEXT_NODE: 3
ENTITY_REFERENCE_NODE: 5
DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: 32
DOCUMENT_FRAGMENT_NODE: 11
cloneNode: function cloneNode() { [native code] }
dispatchEvent: function dispatchEvent() { [native code] }
PROCESSING_INSTRUCTION_NODE: 7
isDefaultNamespace: function isDefaultNamespace() { [native code] }
insertBefore: function insertBefore() { [native code] }
removeChild: function removeChild() { [native code] }
hasChildNodes: function hasChildNodes() { [native code] }
addEventListener: function addEventListener() { [native code] }
DOCUMENT_POSITION_PRECEDING: 2
normalize: function normalize() { [native code] }
compareDocumentPosition: function compareDocumentPosition() { [native code] }
DOCUMENT_TYPE_NODE: 10
COMMENT_NODE: 8
replaceChild: function replaceChild() { [native code] }
DOCUMENT_POSITION_FOLLOWING: 4
removeEventListener: function removeEventListener() { [native code] }
ATTRIBUTE_NODE: 2
DOCUMENT_POSITION_CONTAINED_BY: 16
DOCUMENT_NODE: 9
DOCUMENT_POSITION_CONTAINS: 8
appendChild: function appendChild() { [native code] }
isSameNode: function isSameNode() { [native code] }
lookupPrefix: function lookupPrefix() { [native code] }
lookupNamespaceURI: function lookupNamespaceURI() { [native code] }
[Inline SVG Infomation]
systemLanguage: [object SVGStringList]
externalResourcesRequired: [object SVGAnimatedBoolean]
currentTranslate: [object SVGPoint]
width: [object SVGAnimatedLength]
viewBox: [object SVGAnimatedRect]
pixelUnitToMillimeterX: 0.2645833194255829
y: [object SVGAnimatedLength]
screenPixelToMillimeterX: 0.2645833194255829
currentScale: 1
x: [object SVGAnimatedLength]
viewport: [object SVGRect]
useCurrentView: false
xmllang:
pixelUnitToMillimeterY: 0.2645833194255829
className: [object SVGAnimatedString]
farthestViewportElement: null
height: [object SVGAnimatedLength]
screenPixelToMillimeterY: 0.2645833194255829
requiredExtensions: [object SVGStringList]
contentStyleType: text/css
contentScriptType: text/ecmascript
requiredFeatures: [object SVGStringList]
xmlspace: default
style: [object CSSStyleDeclaration]
nearestViewportElement: null
preserveAspectRatio: [object SVGAnimatedPreserveAspectRatio]
zoomAndPan: 2
viewportElement: null
ownerSVGElement: null
id:
xmlbase:
dataset: [object DOMStringMap]
clientWidth: 0
scrollWidth: 0
offsetWidth: 0
offsetLeft: 0
clientTop: 0
lastElementChild: null
offsetParent: null
nextElementSibling: null
tagName: svg
previousElementSibling: null
childElementCount: 0
scrollLeft: 0
firstElementChild: null
clientLeft: 0
offsetHeight: 0
clientHeight: 0
offsetTop: 0
scrollTop: 0
scrollHeight: 0
previousSibling: null
parentNode: null
lastChild: null
baseURI: null
firstChild: null
nodeValue: null
textContent:
nodeType: 1
nodeName: svg
prefix: null
childNodes: [object NodeList]
nextSibling: null
attributes: [object NamedNodeMap]
ownerDocument: [object HTMLDocument]
namespaceURI: http://www.w3.org/2000/svg
localName: svg
parentElement: null
createSVGNumber: function createSVGNumber() { [native code] }
getCurrentTime: function getCurrentTime() { [native code] }
getIntersectionList: function getIntersectionList() { [native code] }
unsuspendRedraw: function unsuspendRedraw() { [native code] }
suspendRedraw: function suspendRedraw() { [native code] }
checkEnclosure: function checkEnclosure() { [native code] }
getPresentationAttribute: function getPresentationAttribute() { [native code] }
hasExtension: function hasExtension() { [native code] }
getEnclosureList: function getEnclosureList() { [native code] }
animationsPaused: function animationsPaused() { [native code] }
forceRedraw: function forceRedraw() { [native code] }
SVG_ZOOMANDPAN_UNKNOWN: 0
SVG_ZOOMANDPAN_MAGNIFY: 2
createSVGLength: function createSVGLength() { [native code] }
unsuspendRedrawAll: function unsuspendRedrawAll() { [native code] }
getElementById: function getElementById() { [native code] }
getBBox: function getBBox() { [native code] }
getCTM: function getCTM() { [native code] }
createSVGRect: function createSVGRect() { [native code] }
SVG_ZOOMANDPAN_DISABLE: 1
checkIntersection: function checkIntersection() { [native code] }
createSVGTransformFromMatrix: function createSVGTransformFromMatrix() { [native code] }
unpauseAnimations: function unpauseAnimations() { [native code] }
setCurrentTime: function setCurrentTime() { [native code] }
createSVGPoint: function createSVGPoint() { [native code] }
pauseAnimations: function pauseAnimations() { [native code] }
deselectAll: function deselectAll() { [native code] }
createSVGAngle: function createSVGAngle() { [native code] }
createSVGMatrix: function createSVGMatrix() { [native code] }
createSVGTransform: function createSVGTransform() { [native code] }
getScreenCTM: function getScreenCTM() { [native code] }
getTransformToElement: function getTransformToElement() { [native code] }
querySelector: function querySelector() { [native code] }
webkitMatchesSelector: function webkitMatchesSelector() { [native code] }
hasAttribute: function hasAttribute() { [native code] }
getAttributeNode: function getAttributeNode() { [native code] }
getAttributeNS: function getAttributeNS() { [native code] }
getElementsByTagNameNS: function getElementsByTagNameNS() { [native code] }
getElementsByClassName: function getElementsByClassName() { [native code] }
removeAttributeNS: function removeAttributeNS() { [native code] }
querySelectorAll: function querySelectorAll() { [native code] }
contains: function contains() { [native code] }
getClientRects: function getClientRects() { [native code] }
scrollByPages: function scrollByPages() { [native code] }
setAttributeNode: function setAttributeNode() { [native code] }
setAttributeNS: function setAttributeNS() { [native code] }
hasAttributeNS: function hasAttributeNS() { [native code] }
blur: function blur() { [native code] }
scrollIntoViewIfNeeded: function scrollIntoViewIfNeeded() { [native code] }
setAttribute: function setAttribute() { [native code] }
scrollByLines: function scrollByLines() { [native code] }
getElementsByTagName: function getElementsByTagName() { [native code] }
removeAttribute: function removeAttribute() { [native code] }
setAttributeNodeNS: function setAttributeNodeNS() { [native code] }
getAttribute: function getAttribute() { [native code] }
removeAttributeNode: function removeAttributeNode() { [native code] }
getAttributeNodeNS: function getAttributeNodeNS() { [native code] }
focus: function focus() { [native code] }
scrollIntoView: function scrollIntoView() { [native code] }
getBoundingClientRect: function getBoundingClientRect() { [native code] }
hasAttributes: function hasAttributes() { [native code] }
isSupported: function isSupported() { [native code] }
isEqualNode: function isEqualNode() { [native code] }
cloneNode: function cloneNode() { [native code] }
dispatchEvent: function dispatchEvent() { [native code] }
isDefaultNamespace: function isDefaultNamespace() { [native code] }
insertBefore: function insertBefore() { [native code] }
removeChild: function removeChild() { [native code] }
hasChildNodes: function hasChildNodes() { [native code] }
addEventListener: function addEventListener() { [native code] }
normalize: function normalize() { [native code] }
compareDocumentPosition: function compareDocumentPosition() { [native code] }
replaceChild: function replaceChild() { [native code] }
removeEventListener: function removeEventListener() { [native code] }
appendChild: function appendChild() { [native code] }
isSameNode: function isSameNode() { [native code] }
lookupPrefix: function lookupPrefix() { [native code] }
lookupNamespaceURI: function lookupNamespaceURI() { [native code] }
NOTATION_NODE: 12
CDATA_SECTION_NODE: 4
ELEMENT_NODE: 1
DOCUMENT_POSITION_DISCONNECTED: 1
ENTITY_NODE: 6
TEXT_NODE: 3
ENTITY_REFERENCE_NODE: 5
DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: 32
DOCUMENT_FRAGMENT_NODE: 11
PROCESSING_INSTRUCTION_NODE: 7
DOCUMENT_POSITION_PRECEDING: 2
DOCUMENT_TYPE_NODE: 10
COMMENT_NODE: 8
DOCUMENT_POSITION_FOLLOWING: 4
ATTRIBUTE_NODE: 2
DOCUMENT_POSITION_CONTAINED_BY: 16
DOCUMENT_NODE: 9
DOCUMENT_POSITION_CONTAINS: 8
よくわからなかった。。。
tags: canvas svg iphone
Posted by NI-Lab. (@nilab)