«Недопустимый аргумент» Ошибка в IE, в строке номер, который не существует - PullRequest
7 голосов
/ 17 июня 2009

Я получаю следующую ошибку в IE 6:

Line: 454  
Char: 13  
Error: Invalid Argument  
Code: 0  
URL: xxxxx/Iframe1.aspx 

и я не могу на всю жизнь найти причину этого.

Это происходит только в ситуации, когда у меня есть главная страница с несколькими IFrame, и это происходит только тогда, когда у меня есть один конкретный IFrame (тот, на который указывает URL в сообщении об ошибке), и что IFrame невидим в время загрузки.
Я сузил это до там, но я все еще не могу найти что-то более конкретное ...

Рассматриваемый IFrame не имеет 454 строки в своем HTML, равно как и файлы JS, на которые он ссылается.

Я попытался подключить VS к iexplore.exe в качестве отладчика, и он прерывается при возникновении ошибки, но затем сообщает мне «Нет исходного кода для текущего местоположения» ...

Любые предложения о том, как я могу преследовать это?


ОБНОВЛЕНИЕ: Я нашел эту проблему с помощью грубой силы, в основном, закомментировав все и раскомментировав случайным образом ...
Но все еще остается вопрос: как рационально определить, где находится ошибка, когда IE сообщает неверный номер строки / файл?

Ответы [ 8 ]

11 голосов
/ 17 июня 2009

IE движок Javascript отвратителен, когда дело доходит до отладки. Вы можете попробовать включить отладку скриптов в расширенных настройках, а затем, если у вас установлена ​​Visual Studio, она перейдет к месту ошибки ... если вам повезет. В других случаях вы ничего не получаете, особенно если код был eval () 'ed.

Еще одна особенность этих номеров строк состоит в том, что они не отражают файл, в котором происходит ошибка. У меня были случаи, когда номер строки был действительно правильным, но он был в связанном файле .js, а не в главном. файл.

6 голосов
/ 18 июня 2009

Попробуйте использовать Microsoft Script Debugger или DebugBar (http://www.debugbar.com), которые могут дать вам некоторые лучшие средства отладки IE6. Они всегда помогают мне с IE6.

Кроме того, это происходит в новых версиях IE или только в IE6?

5 голосов
/ 17 июня 2009

Практически невозможно отладить это без живого примера, но одна вещь, которая часто вызывает ошибку «Недопустимый аргумент» в Internet Explorer, пытается установить неправильное значение для свойства стиля.

Так что-то вроде:

document.getElementById("foo").style.borderWidth = bar + "px";

когда "bar" имеет значение null, или undefined, или является строкой "grandma", будет вызывать его, поскольку "grandmapx" не является допустимым значением для свойства стиля borderWidth.

2 голосов
/ 10 января 2012

IE9 имеет режим браузера.

Откройте Developer Tools, затем выберите версию, которую вы хотите эмулировать в консоли, перезагрузите страницу с ошибками, и консоль покажет вам номера строк и правильный файл, в котором находится ошибка.

1 голос
/ 10 декабря 2012

Примечание для других читателей: у меня недавно был этот «Неверный аргумент». Об ошибке сообщили в IE7-9 и в итоге обнаружили, что все было так, как я использовал setTimeout / setInterval.

Это неправильно, в IE:

var Thing = {};
Thing.myFunc = function() { ... };
setTimeout(Thing.myFunc, 1000);

Вместо этого, оберните обратный вызов в анонимную функцию следующим образом:

var Thing = {};
Thing.myFunc = function() { ... };
setTimeout(function() { Thing.myFunc(); }, 1000);

и больше нет ошибок "неверный аргумент".

1 голос
/ 17 июня 2009

Я тоже часто сталкиваюсь с этой проблемой, и я также прибегаю к комментариям, пока не найду проблему. Одна вещь, которую я считаю полезной, - это добавить блок try / catch в каждый метод javascript. Иногда я добавляю оповещение о том, из какого метода произошла ошибка. Все еще утомительно, но проще, чем пробная версия и комментирование ошибок. И если вы добавляете их каждый раз, когда пишете новый метод, это экономит много времени при возникновении таких ошибок.

function TestMethod()
{
    try
    {
        //whatever
    }
    catch (ex)
    {
        ShowError(ex.description);
        //alert("TestMethod");
    }
}
0 голосов
/ 07 апреля 2012

Как указал NickFitz, стилизация была проблемой с моим кодом.

document.getElementById('sums<%= event.id %>').style.border='1px solid #3b3b3b;'

Я удалил стиль рамки, и мои проблемы с IE исчезли.

0 голосов
/ 11 августа 2010

Другая возможность:

Я много занимаюсь разработкой между двумя компьютерами, дома и на работе, поэтому я часто пишу себе по электронной почте или загружаю страницы с сервера для дальнейшей работы. Недавно я понял, что Vista имеет привычку в одностороннем порядке применять блоки к определенным файлам, когда они загружаются определенным образом, не уведомляя меня об этом.

В результате, например, HTML-страница хочет получить доступ к файлу .js в своем заголовке, но не имеет разрешения для доступа к локальным файлам. В этом случае не имеет значения, что вы пишете в файле .js, браузер никогда не прочитает его, и в результате возникнет утомительная ошибка Line: 0.

Поэтому перед тем, как прочесать свой код на предмет ошибки, проверьте свойства своей HTML-страницы и посмотрите, не была ли она заблокирована ОС ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...