0

JSファイルを含むHTMLページの下にコードがあります。関数d()はの3つの出力不可能な文字(ASCII 005)を含む24文字の文字列を受け取り、含まれる文字の数を数えます。この番号はアラート()で表示されます。Internet ExplorerのJavascript機能で印刷できない文字がありません

  • Google Chrome:は結果として24を正しく表示します。
  • Google Chrome(JSデバッガ):は結果として24を正しく表示します。
  • Internet Explorer 9:は結果として24を正しく表示します。
  • Internet Explorer 9(JSデバッガー):は、21(24-3の印刷不可能)のみを表示します。

私は本当にこれがInternet Explorerで動作する必要があります。何か案は?知っているおかげ

test.htmlという

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<title>JavaScript Scripting</title> 
</head> 
<body> 
<script type="text/javascript" charset="utf-8" src="test.js"> 
</script> 
</body> 
</html> 

TEST.JS

function d(a){return a.length;}; 
document.write("<script language=\"Javascript\" charset=\"utf-8\">alert(".concat(d("a[NULL]lert(\"He[NULL]llo Worl[NULL]d\");")).concat(");</script>")); 
+0

文字列の長さだけを返してみませんか? – kirilloid

+0

ありがとうございます。私はして問題はそこにあります。質問を更新しました。 – Arturo

+1

Hmm。あなたはそれらの文字をエスケープしようとしましたか?私。それらを '\ x05'または' \ u0005'としてください。また、どのバージョンのIEを使用しているのかを質問に追加してください。 – kirilloid

答えて

1

あなたがすべき IEはこのバイトを失った!しかし、分割して正確に見逃しているように見えます。IEがtrueを返すかどうかを確認してください(== "\ u0005")。 smth +""のtoString()のようなハックを避けるようにしてください('Infinity' -0の後にはどうなりますか?)。または、var i= 0; while (a.length) { substr(a, 0, 1); i+=1; //... IEを使用してテストすることはできますが、役立つ可能性があります。

UPD

As provided by MSDN IEではない標準モードととして少ないし、9件の評価さ"\v" == "v"で、それは文字列の長さが短くなる原因となるnullcharと同じだろうか?

+0

コメントありがとうございます。非常に興味深いのは、 "\ v"アップデートです。私はIE9を使用しています。私は私の質問を更新しました。私はa.lengthを行うとIEで24の代わりに21が得られるので、問題は受信した文字列にあるようです。と非常に奇妙な:それはIE9のJSデバッガで失敗しているだけですが、私はIE9のブラウザで正しく24を受け取ります。おそらく文字セットの問題? – Arturo

+1

よく分からないIEが正常に動作し、デバッガが動作しない場合たぶん、デバッガは非標準モードになっていますか?デバッガでローカルの文字列の長さをチェックしようとしましたか? –

+0

IE9 JSデバッガはデフォルトでは非標準モードです。これを変更するだけでした。どうもありがとうございました。 – Arturo

関連する問題