2009-06-28 3 views
1

Startseite:iframe das Onload-Ereignis nicht in firefox Brennen (bezogen auf ASP.NET-Datei-Upload)

<iframe src="/files/new" onload="alert('onload');"></iframe> 

und innerhalb des iframe,/files/neu macht:

<form action="/files/create" method="post" enctype="multipart/form-data" > 
    <input type="file" name="file1" size="28" /> 
    <input type="submit" value="submit" value="Submit" /> 
</form> 

Wenn ich einreichen Eine Datei, das Onload-Ereignis von iframe wird wie erwartet ausgelöst. Aber wenn ich eine große Datei größer als der Wert in der httpRuntime von httpRuntime in web.config einreichen, wird Iframe Onload-Ereignis nicht ausgelöst (nur in Firefox (ich getestet mit v3.0.11). IE und Google Chrome feuert Onload-Ereignis normalerweise).

Ich benutze jQuery ajaxSubmit, um Dateien hochzuladen und ajaxSubmit intern verwendet iframe und zu Onload-Ereignis zu überwachen, um Erfolg oder Misserfolg zu benachrichtigen. Wenn ich also eine große Datei hochlade, wird jeder Callback in Firefox aufgerufen und ich habe keine Möglichkeit zu wissen, ob es erfolgreich ist oder fehlgeschlagen ist.

Antwort

1

Ich bin oft in solche Probleme geraten, so dass ich eine Katze auf eine andere Art und Weise aussehen lasse. Ist es möglich, anstelle des Onloads etwas in den Frame einzufügen, um auf den äußeren Teil des DOM zu verweisen?

Zum Beispiel könnten Sie einfach eine Variable als Teil des übergeordneten Hauptfensters window.parent.uploadComplete dann verwenden Sie einen Timer, um den Status der Upload abgeschlossen Variable anzuzeigen?

Es ist nicht so effektiv wie ein Trigger mit Onload, aber manchmal ist das das Opfer für Cross-Browser-Kompatibilität.

1

Wenn Sie möchten, dass ältere Browser etwas ausführen, nachdem das Dokument vollständig in den Iframe geladen wurde, können Sie einen Onload-Handler in das Dokument einfügen.

Das Dokument kann dann mit dem übergeordneten Schlüsselwort auf das enthaltene Dokument verweisen.

Dies sollte Ihr Problem lösen.

1

etwas im Zusammenhang mit:

Sie die Funktion nicht geben Sie den Aufruf onload den Namen 'onload' in.

<body onload="onload();"> 

Dies funktioniert in IE, führt aber zu unendlicher Rekursion in FF.