2009-06-17 5 views
6

Ich erhalte die folgenden Fehler in IE 6 nicht vorhanden ist:‚Invalid Argument‘ Fehler in IE, in einer Zeilennummer, die nicht

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

und ich kann nicht für das Leben von mir finden, was verursacht dies.

Das passiert nur in einer Situation, wo ich eine Hauptseite habe, die mehrere IFrames hat, und es passiert nur, wenn ich ein bestimmtes IFrame habe (das von der URL in der Fehlermeldung gezeigt), und dass IFrame unsichtbar ist zum Zeitpunkt des Ladens.
Ich habe es bis dahin eingegrenzt, aber ich kann immer noch nichts Spezifischeres finden ...

Der fragliche IFrame hat keine 454 Zeilen in seinem HTML, noch wird irgendeine der JS-Dateien verwiesen von ihm.

Ich habe versucht VS Befestigung als Debugger iexplore.exe, und es bricht, wenn der Fehler auftritt, aber dann sagt mir: „Es gibt keine verfügbaren Quellcode für den aktuellen Standort“ ...

Irgendwelche Vorschläge auf Wie kann ich diesen hier verfolgen?


UPDATE: Ich fand dieses Problem durch Brute-Force, im Grunde alles aus und uncommenting kommentiert zufällig ...
Aber die Frage steht immer noch: Was ist die rationale Art und Weise zu finden, wo der Fehler ist, wenn IE meldet die falsche Zeilennummer/Datei?

+0

Es ist wirklich eine schwierige Frage zu beantworten, ohne in der Lage zu sein, das ganze Problem zu sehen. Hast du das Debuggen in Firefox oder in der Oper versucht? Öffnen Sie es in einem dieser und überprüfen Sie die Fehlerkonsole für eine hilfreichere Fehlermeldung. –

+0

Firefox Firebug Plugin macht Debugging viel, viel einfacher. Ich schlage vor, das auf der Seite auszuprobieren. –

+0

Ian, Ben, danke für deine Vorschläge. Ich benutze tatsächlich FireBug die ganze Zeit, aber dieses Problem passiert nur in IE. –

Antwort

5

Es ist praktisch unmöglich, dies ohne ein Live-Beispiel zu debuggen, aber eine Sache, die oft einen Fehler "Ungültige Argument" in Internet Explorer verursacht versucht, einen falschen Wert für eine Stileigenschaft festzulegen.

So etwas wie:

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

wenn „bar“ den Wert null hat, oder nicht definiert ist, oder ist die Zeichenfolge „Oma“, wird es dazu führen, als „grandmapx“ ist kein gültiger Wert für die borderWidth-Eigenschaft.

+0

Danke. Ich habe tatsächlich überall nachgesehen, wo ich den Stil manipuliere und diese kommentiert habe. Ich bin tatsächlich auf der Suche nach Zeigern, was ich tun kann, wenn IE einen Fehler in einer Zeilennummer meldet, die nicht existiert. Irgendwelche Ideen? –

+0

Die Wege des IE sind seltsam, und wir sind nicht zu verstehen, dass wir Normalsterblichen ;-) Ich würde empfehlen, es in Firefox, Safari, Chrome oder Opera und sehen, ob sie Ihnen einen besseren Hinweis darauf geben können, wo genau der Fehler es passiert. IE ist leider dafür bekannt, bedeutungslose Zeilennummern zu erzeugen. – NickFitz

11

IE Javascript-Engine ist ekelhaft, wenn es um das Debuggen geht. Sie können versuchen, Skript-Debugging in den Erweiterten Optionen zu aktivieren, und wenn Sie Visual Studio installiert haben, wird es an den Ort des Fehlers springen ... wenn Sie Glück haben. Andere Male erhalten Sie nichts, besonders wenn der Code eval() 'ed war.

Eine andere Sache über diese Zeilennummern ist, dass es nicht widerspiegelt, in welcher Datei der Fehler passiert. Ich hatte Fälle, in denen die Zeilennummer tatsächlich korrekt war, aber es war in einer verknüpften .js-Datei, nicht die Hauptdatei.

1

Ich laufe auch auf dieses Problem viel, und ich habe auch Zuflucht genommen, alles zu kommentieren, bis ich das Problem finde. Eine Sache, die ich als nützlich empfinde, ist das Hinzufügen eines try/catch-Blocks zu jeder Javascript-Methode. Manchmal füge ich eine Warnung hinzu, um zu sagen, von welcher Methode der Fehler kam. Immer noch mühsam, aber einfacher als Versuch und Irrtum. Und wenn Sie sie jedes Mal hinzufügen, wenn Sie eine neue Methode schreiben, spart dies viel Zeit, wenn solche Fehler auftreten.

function TestMethod() 
{ 
    try 
    { 
     //whatever 
    } 
    catch (ex) 
    { 
     ShowError(ex.description); 
     //alert("TestMethod"); 
    } 
} 
6

Versuchen Sie, den Microsoft Script Debugger oder DebugBar mit (http://www.debugbar.com), die Sie einige bessere IE6 Debugging-Tools geben kann. Sie helfen mir immer mit IE6.

Auch geschieht dies in neueren Versionen von IE oder nur in IE6?

+0

DebugBar war ein toller Fund (und frei für den persönlichen Gebrauch). Vielen Dank! – acatalept

0

Ein andere Möglichkeit:

Ich mache viele Entwickler zwischen zwei Computern, zu Hause und bei der Arbeit, so dass ich eine E-Mail mich oft oder Download-Seiten von dem Server zu arbeiten. Kürzlich wurde mir klar, dass Vista die Angewohnheit hat, Blöcke auf bestimmte Dateien einseitig zu übertragen, wenn sie auf bestimmte Art und Weise heruntergeladen werden, ohne mich darüber zu informieren, dass dies der Fall ist.

Das Ergebnis ist, dass zum Beispiel eine HTML-Seite auf die .js-Datei in ihrer Kopfzeile zugreifen möchte, aber keine Berechtigung zum Zugriff auf lokale Dateien hat. In diesem Fall spielt es keine Rolle, was Sie in die .js-Datei schreiben, der Browser liest sie nicht einmal und es kommt zu einem lästigen Line: 0 Fehler.

Also, bevor Sie Ihren Code für einen Fehler kämmen, überprüfen Sie die Eigenschaften der HTML-Seite, und sehen, ob es nicht durch das Betriebssystem blockiert worden ist ....

2

IE9 hat einen Browser-Modus.

Öffnen Sie die Entwicklertools, wählen Sie die zu emulierende Version in der Konsole aus, laden Sie die Seite mit Fehlern neu, und die Konsole zeigt Ihnen Zeilennummern und die korrekte Datei an, in der der Fehler auftritt.

0

Wie NickFitz darauf hingewiesen, Styling war ein Problem mit meinem Code.

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

Ich entfernte die Grenze Stil und meine IE Probleme waren weg.

1

Ein Hinweis für andere Leser: Ich hatte vor kurzem dieses "ungültige Argument". Fehler in IE7-9 gemeldet und schließlich festgestellt, dass es auf die Art und Weise, die ich setTimeout/setInterval verwendet wurde.

Das ist falsch, in IE:

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

Statt wie so den Rückruf in einer anonymen Funktion wickeln:

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

und nicht mehr "ungültig Argument" Fehler.

+2

Es ist nicht so, dass Ihr erster Anruf falsch ist, aber 'Thing.myFunc' ist nur eine Funktion. Es enthält keinen Verweis auf 'Thing', wenn der Code innerhalb von' Thing.myFunc' versucht, 'this' zu verwenden, dann würde es o.k. funktionieren. wenn direkt 'Thing.myFunc()' aufgerufen wird (was auch passiert, was auf dem zweiten Code in Ihrer Antwort passiert. – epeleg

Verwandte Themen