latest log

酩酊状態で書いたエンジニアポエムです。酩酊状態で読んでください。

IE 6, IE7, IE 8 でキャッシュしておいた文字列を、動的に生成した script 要素に設定し、文字列を JavaScript として評価する方法

IE 8 で文字列から動的に script 要素を生成したい時もあると思います。
オフラインにキャッシュしておいた文字列を JavaScript として評価したい場合などです。

こうすると動作します

IE6 ~ IE8 専用です。

var script = document.createElement("script");

document.getElementsByTagName("head")[0]).appendChild(script);
script.outerHTML = '&nbsp;<script defer="defer">' + 
                   jsExpression + '</script>';

document.createElement("script") でダミーの(プレースホルダの) script 要素を作り、そのあとで outerHTML で上書きしています。

これでも良いようです

script.text に文字列を代入すると、JavaScript として評価されます。

var script = document.createElement("script");

document.getElementsByTagName("head")[0]).appendChild(script);
script.text = jsExpression;

モダンブラウザなら

IE6~IE8 以外のブラウザならこれでいけます。IE9 でも動きます。
document.head がない環境では、document.getElementsByTagName("head")[0]) から head 要素を取ってください。

var script = document.createElement("script");

script.charset = "utf-8";
document.head.appendChild(script);
script.textContent = jsExpression;


x3.js では調査した全てのブラウザで動作する script.text = ... を採用しています。