window.toStaticHTML()
IE8からwindow.toStaticHTML()メソッドが追加されました。引数に与えられたHTMLの断片からscriptタグや、onclick属性などのDynamic HTMLの要素を削除するためのメソッドです。
XDomainRequestのレスポンスに、意図しないscriptタグなどが入ってきたときにまずいことにならないようにそれを削除する用途で利用できます。
toStaticHTMLの利用方法
HTMLStr = "Hello<script>alert('foo');</"+"script> World!!"; alert(window.toStaticHTML(HTMLStr)); // Hello World!! alert(toStaticHTML(HTMLStr)); // Hello World!!
toStaticHTMLの実行結果
例:その1
<span onclick="alert('Hello World!!')">Hello World!!</span>
<span>Hello World!!</span>
例:その2
<script type="text/javascript"> var foo = "foo"; alert(foo); </script>
scriptタグは問答無用で削除。
例:その3
<style type="text/css"> .foo{ color: red; background-color: expression(true ? "#3366ff" : "#000000"); } .bar{ color: blue; background-color: yellow; } </style>
<style> .foo {color:red;} .bar {color:blue;background-color:yellow;} </style>
type="text/css"は削除されていいのか...。スタイルシート expressionが削除されている点に注目。
検証コード
<html> <head></head> <body> <script type="text/javascript"> HTMLStr = '<span onclick="alert('Hello World!!')">Hello World!!</span>'; SCRIPTStr = '<script type="text/javascript">' + 'var foo = "foo";' + 'alert(foo);' + '</'+ 'script>'; STYLEStr = '<style type="text/css">' + '.foo{ color: red; background-color: expression(true ? "#3366ff" : "#000000"); }' + '.bar{ color: blue; background-color: yellow; }' + '</style>'; alert(window.toStaticHTML(HTMLStr)); alert(window.toStaticHTML(SCRIPTStr)); alert(window.toStaticHTML(STYLEStr)); alert(window.toStaticHTML(HTMLStr + SCRIPTStr + STYLEStr)); </script> </body> </html>