読者です 読者をやめる 読者になる 読者になる

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>