0

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

  • 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

Хм. Вы пытались избежать этих символов? То есть поместите их как '\ x05' или' \ u0005'. Кроме того, добавьте к вопросу, какую версию IE вы используете. – kirilloid

ответ

1

Вы должны знать, когда IE потерял этот байт! Но похоже, что он пропустил их точно по split: проверьте, возвращается ли 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 т.е. не в стандартном режиме и менее чем 9 Равняется "\v" == "v" как истинная, так что это может быть то же самое с nullchar, который вызывает длина строки становится короче?

+0

Спасибо за ваш комментарий. Очень интересно обновление «\ v». Я использую IE9. Я обновил свой вопрос, так как кажется, что проблема в полученной строке, потому что если я делаю a.length, я получаю 21 вместо 24 в IE. И очень странно: это только неудача на IE9 JS DEBUGGER, но на браузере IE9 я правильно получаю 24. Возможно, проблема с кодировкой? – Arturo

+1

Даже не уверен. Если IE работает нормально и отладчик нет. Может быть, отладчик каждый раз находится в нестандартном режиме? Вы пытались проверить длину локальной строки с помощью отладчика? –

+0

Вы были правы, IE9 JS отладчик по умолчанию работает в нестандартном режиме. Просто нужно было изменить это. Большое спасибо. – Arturo

Смежные вопросы