Firefox4で動かないコードめも
String.replaceあたり
https://developer.mozilla.org/ja/E4Xに書いてあるバグ回避コードが動かないことがある
(E4XではXML宣言のパースができないので削除して対応しようというコード)
var response = xmlhttprequest.responseText; // bug 270553 response.replace(/^<\?xml\s+version\s*=\s*(["'])[^\1]+\1[^?]*\?>/, ""); // bug 336551 var e4x = new XML(response);
ここで、responseの長さが一定の長さ以上だととかの文字列がちゃんとreplaceされないっぽい(Firefox3.6だと大丈夫)
let a = ""; for(let i=0; i<1000000; i++) { a += "a"; } let b = '<?xml version="1.0"?>' + a; //Firefox 4 β10 WinXPでは<?xml version="1.0"?>aaaaaa....となった alert(b.replace(/^<\?xml\s+version\s*=\s*(["'])[^\1]+\1[^?]*\?>/,""));
b.replace(/^<\?xml\s+version\s*=\s*(["'])1.0\1[^?]*\?>/, "");
とかするとちゃんと動く*1ので特殊変数\1を使っている[^\1]の部分が問題なんじゃないかと思う
*1:汎用性は全く無いけど