2006/04/11(Tue) KB912945対策
■[JavaScript]MSIEのパッチKB912945の対応案
たとえば・・・ですが、以下のような「やる気のない」対応でもいいかもしれません。
【条件】
- object,embed,appletの各オブジェクトに対し、動的にイベントメソッドなどを追加・削除していないこと
- object,embed,appletの各オブジェクトのonloadが2回呼ばれたり、(自動再生ならば)2回開始したりするかもしれないが、少しの時間差であれば許容できること
【特徴】
【外部ファイル】
(function() {
var all = document.all;
if(all) {
var lst = [];
var len = all.length;
for(var i = 0; i < len; i++) {
var obj = all[i];
if(obj && obj.nodeName) {
switch(obj.nodeName.toLowerCase()) {
case "object":
case "applet":
case "embed":
lst[lst.length] = obj;
break;
default:
}
}
}
for(var i = 0; i < lst.length; i++) {
lst[i].outerHTML += "";
}
lst = null;
}
})();
【HTMLファイル】
</body>の直前に、
<script language="JScript" src="★" charset="◆"></script>
★:上記JSファイル
◆:上記JSファイルの文字コード
を入れる。
【考え方】
- やる気ない(こんなことに労力を使いたくない)
- HTMLファイルはなるべく変更したくない
- MSIEだけ対象だからdocument.allで対象を探してouterHTMLをそのまま書き換えればいいでしょ*1
- 動的に実装されたイベントハンドラは却下*2
以下2006/01/13追記
【技術的観点】
- 対象とするブラウザ
- document.allのループについて
- outerHTMLの置き換えについて
- <script>タグの記述場所
- 問題点
- 拡張性
もし拡張するならば、
- この外部JSを読み込むscriptタグの属性として、(HTMLの仕様になくても)適当な属性を書く。
これはdocument.scripts[document.scripts.length-1].getAttribute(●)とすれば取り出せるはずです。<script language="JScript" src="★" charset="◆" ●="●属性の値"></script> ●:ありもしない属性 - この外部JSを読み込むscriptタグの開始タグと閉じタグの間に、JSのコメントとしてオプションを記述する。
これは、document.scripts[documents.scripts.length-1].innerHTMLとでもすれば取り出せるはずです。<script language="JScript" src="★" charset="◆"><!-- //オプション1=値1 //オプション2=値2 //--></script>
- この外部JSを読み込むscriptタグの属性として、(HTMLの仕様になくても)適当な属性を書く。
トラックバック - http://d.hatena.ne.jp/Mug/20060411/1144761874
リンク元
- 443 http://mtl.recruit.co.jp/blog/2008/02/ie7swfobject.html
- 66 http://jsgt.org/mt/archives/01/000984.html
- 42 http://jsgt.org/mt/01/
- 20 http://www.flash-jp.com/modules/newbb/viewtopic.php?topic_id=5297&forum=11&post_id=27634
- 18 http://game.gr.jp/js/books/dhtml2/part2/b/b32/b32-5-3.htm
- 6 http://cucumber.g.hatena.ne.jp/misscast/20080226/1203995994
- 4 http://q.hatena.ne.jp/1160317579
- 3 http://0-oo.net/sbox/javascript/flush-flash
- 3 http://d.hatena.ne.jp/notify-Notify_NG_site?aHR0cDovL2QuaGF0ZW5hLm5lLmpwL011Zy8yMDA2MDQxMS8xMTQ0NzYxODc0
- 3 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rls=GGLG,GGLG:2005-32,GGLG:ja&q=javascript+継承