Отсутствуют непечатные символы в функции Javascript в Internet Explorer - PullRequest
0 голосов
/ 11 марта 2012

У меня есть код ниже HTML-страницы, которая включает в себя файл JS. Функция d () получает строку из 24 символов, включая 3 непечатаемых символа (ASCII 005) и подсчитывает, сколько символов включено. Этот номер отображается с предупреждением ().

  • 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>"));

1 Ответ

1 голос
/ 11 марта 2012

Вы должны знать , когда IE потерял этот байт!Но похоже, что они пропускают их точно при разделении: проверьте, возвращает ли IE значение true для "" == "\ u0005".Старайтесь не использовать хак, как smth +"", используйте toString () (что вы получите после 'Infinity' -0?).Или используйте var i= 0; while (a.length) { substr(a, 0, 1); i+=1; //... без IE для тестирования, но это может помочь.

UPD

В соответствии с MSDN IE не в стандартном режиме и менеетогда 9 оценивает "\v" == "v" как true , так что это может быть то же самое с nullchar, из-за чего длина строки становится короче?

...