Ответ 1
Ответ указан в следующей ссылке:
http://support.microsoft.com/kb/936993
Мне пришлось изменить Microsoft.Ajax.js.
Мой сайт asp.net работает хорошо на IE6, IE7, IE8, IE9, Chrome, Safari, Firefox и Opera. Но он не работает вообще в IE10.
Если я нажимаю на любом месте сайта (любая кнопка, любая ссылка и т.д.), она возвращает следующую ошибку:
SCRIPT5022: Sys.ArgumentOutOfRangeException: Value must be an integer.
Parameter name: x
Actual value was 5.999999523162842.
JS вещи, такие как вкладки, не работают из-за этой проблемы. Я обнаружил проблему, и она находится в MicrosoftAjax.js, в частности, следующим способом.
Sys.UI.Point = function Sys$UI$Point(x, y) {
/// <param name="x" type="Number" integer="true"></param>
/// <param name="y" type="Number" integer="true"></param>
/// <field name="x" type="Number" integer="true"></field>
/// <field name="y" type="Number" integer="true"></field>
var e = Function._validateParams(arguments, [
{name: "x", type: Number, integer: true},
{name: "y", type: Number, integer: true}
]);
if (e) throw e;
this.x = x;
this.y = y;
Он работает со всеми другими версиями IE с 6, что довольно сурово.
Я знаю, что HTML поддерживается только реальными браузерами, но Internet Explorer, но мой клиент действительно хочет, чтобы сайт работал в IE10.
Просто, чтобы быть понятным, он хорошо работает в версиях от 6 до 9, хром, firefox и opera. Ни один из них не показывает ошибки javascript, просто ie10, и эта ошибка возникает при каждом нажатии. Я не могу отследить, кто вызывает этот метод. Это большой сайт, и ни один из js-кода, который я использую, вызывает его. Я думаю, что, вероятно, инфраструктура MicrosoftAjax.js связала событие click, и оно что-то выполняет, но я не уверен, что он выполняет.
Кто-нибудь может мне помочь?
Ответ указан в следующей ссылке:
http://support.microsoft.com/kb/936993
Мне пришлось изменить Microsoft.Ajax.js.
Я нашел хороший solution, размещенный в блоге Yuriy:
<script language="javascript">
Sys.UI.Point = function Sys$UI$Point(x, y) {
x = Math.round(x);
y = Math.round(y);
var e = Function._validateParams(arguments, [
{name: "x", type: Number, integer: true},
{name: "y", type: Number, integer: true}
]);
if (e) throw e;
this.x = x;
this.y = y;
}
</script>
Вставьте это на свою страницу, чтобы переопределить функцию Sys $UI $Point для округления чисел.
Или, установите <compilation debug="false">
Либо все это сработало для меня.
Просто чтобы добавить в ответ mafu josh, связанный прототип также может быть проблемой.
Здесь код для этого
Sys.UI.Bounds = function Sys$UI$Bounds(x, y, width, height) {
x = Math.round(x);
y = Math.round(y);
var e = Function._validateParams(arguments, [
{ name: "x", type: Number, integer: true },
{ name: "y", type: Number, integer: true },
{ name: "width", type: Number, integer: true },
{ name: "height", type: Number, integer: true }
]);
if (e) throw e;
this.x = x;
this.y = y;
this.height = height;
this.width = width;
}
У меня была аналогичная проблема; разрешено после выполнения решения, размещенного здесь nileshsaikhede http://forums.asp.net/t/1884400.aspx/1
Все, что мне нужно было сделать, это добавить
<meta http-equiv="X-UA-Compatible" content="IE=7" />
на мою главную страницу.
Я выясню один вариант. Я изменил файл MicrosoftAjax.js
и MicrosoftAjax.debug.js
для округления значения точки перед возвратом Sys.UI.Point
для всех областей - см. Ниже.
if (typeof param1 === "number")
{
param1 = Math.round(param1);
}
if (typeof param2 === "number")
{
param2 = Math.round(param2);
}
return new Sys.UI.Point(param1, param2);
Я ссылаюсь на модифицированный файл js, используя параметр Script в коде ScriptManager страницы ASPX. Вот как это делается.
Я надеюсь, что это поможет другим.
если вы используете интернет-проводник, тогда нажмите ALT выберите Инструменты ----- > Вид совместимости ------- > затем добавьте свой сайт для отображения в разделе Совместимость. надеюсь, что это поможет вам.