Firefox sluit tabblad met creatObjectURLdirect na openen

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • Tunaflish
  • Registratie: Februari 2010
  • Laatst online: 05-09 16:56
De TT zegt het al: wanneer ik in Firefox een url die ik terugkrijg van createObjectURL() probeer te openen, wordt het tabblad direct gesloten. Chrome toont de data zoals het hoort.

Wat ik in een uitgeklede testcase doe is het volgende:
JavaScript:
1
2
3
4
blob = new Blob(['{prop: "val"}'], {type: 'application/json'});
url = window.URL.createObjectURL(blob);
console.log(blob, url);
window.open(url, '_blank');

De data voor de blob wordt door onze API als base64 aangeleverd, omgezet naar een blob en vervolgens in createObjectURL() gegooid. Voor de testcase heb ik het versimpeld naar een simpel JSON bestand. In Chrome gaat dit dus goed en zie ik de JSON, maar Firefox opent een nieuw tabblad en sluit die vervolgens direct. De logregel laat netjes zien dat er een blob is gemaakt en welke url erbij hoort. Als ik deze url kopieer en in een nieuw tabblad invoer gebeurt er ook helemaal niks.

Het stomme is, het heeft gewerkt :') Wat nog stommer is, als ik een testcase maak krijg ik het probleem niet gereproduceerd: met php zorg ik voor een base64 string van het bestand, die echo ik in een scripttag zodat er verder geen rare externe calls gedaan hoeven te worden, convert de base64 naar een blob, juiste filetype erbij, exact dezelfde code als in de applicatie en voila, document.

Dat doet me vermoeden dat het probleem in de applicatie ligt (duh :+ ), en daar maken we gebruik van Angular. Dus, daar een boel zoekwerk naar gedaan of dat conflicten heeft met blobs, niks nuttigs gevonden. Behalve dat zou je ook verwachten dat als het probleem bij Angular ligt, het in Chrome ook niet zou lukken.

De code wordt uitgevoerd nadat de data van een bestand is opgehaald. Om uit te sluiten dat het misschien aan promises/resolve ligt heb ik het ook buiten die functie geprobeerd. Nog steeds geen resultaat.

Wat ik bij mijn zoektochten veel tegenkwam zijn mensen die het bestand als download willen aanbieden; dat willen we niet. We willen dat het gewoon in een nieuw tabblad wordt geopend, en niet dat je een dialoogvenster krijgt of je een bestand wil openen of opslaan.

Het zijn ook geen popup-instellingen: behalve dat ik daar een melding van zou moeten krijgen van Firefox, zou hij dan het nieuwe tabblad überhaupt al niet moeten openen. Daarnaast heb ik al aangegeven dat ze voor die site mogen.

Edit: wat ik ook tegenkwam is revokeObjectURL(), en hoe die de referentie naar de blob verwijdert. Die roep ik nergens expliciet aan, en afaik wordt die ook nooit automatisch aangeroepen, totdat je de huidige pagina unloadt. Ik heb nog zitten experimenteren met die expliciet aanroepen, had nul effect.

Kortom, ik weet het niet meer en hoop dat iemand zometeen een soortgelijk probleem heeft gehad, een obscure oplossing heeft gevonden in een duistere hoek van het net en bereid is die te delen.

Voor de volledigheid nog even de hele functie zoals die in productie dus niet werkt:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$scope.downloadFile = function(attachment){
  SomeModel.getAttachment(attachment.id).then(function(data){
    /* Dit probeer de echte data te tonen
    blob = createBlob(data.base64, data.filetype);
    url = URL.createObjectURL(blob);
    window.open(url, '_blank');
    */

    /* Dit is een stuk simpele json, om problemen met createBlob() uit te sluiten */
    var data = '{prop1: "val1", prop2: "val2"}';
    var type = 'application/json';

    blob = new Blob([data], {type: type});
    url = URL.createObjectURL(blob);
    window.open(url, '_blank'); 
  });
}

[ Voor 4% gewijzigd door Tunaflish op 06-04-2017 10:54 . Reden: Alinea over revokeObjectURL toegevoegd ]

So long, and thanks for all the fish!

Beste antwoord (via Tunaflish op 10-04-2017 15:04)


  • Klaasvaak
  • Registratie: Maart 2010
  • Laatst online: 31-08 10:04
Heb je een addblocker geinstalleerd? Die willen nog wel eens de oorzaak zijn van direct sluitende tabbladen.

Alle reacties


Acties:
  • 0 Henk 'm!

Verwijderd

Geen oplossing, maar als troost: je bent niet gek. Als ik de binnenste code uit je laatste voorbeeld gebruik gebeurt er exact hetzelfde.

Acties:
  • 0 Henk 'm!

  • Spinal
  • Registratie: Februari 2001
  • Laatst online: 08-09 14:12
Kan het zijn dat Firefox JSON-bestanden downloadt ipv toont in de browser? Gebeurd het ook als je het met een HTML-bestand of een TXT-bestand probeert?

Full-stack webdeveloper in Groningen


Acties:
  • 0 Henk 'm!

  • Tunaflish
  • Registratie: Februari 2010
  • Laatst online: 05-09 16:56
Verwijderd schreef op zaterdag 8 april 2017 @ 15:21:
Geen oplossing, maar als troost: je bent niet gek. Als ik de binnenste code uit je laatste voorbeeld gebruik gebeurt er exact hetzelfde.
Dat scheelt :+
Spinal schreef op maandag 10 april 2017 @ 09:21:
Kan het zijn dat Firefox JSON-bestanden downloadt ipv toont in de browser? Gebeurd het ook als je het met een HTML-bestand of een TXT-bestand probeert?
Het maakt niet uit met wat voor bestand ik het doe: JSON, pdf, jpg, alles laat heel kort een wit scherm zien en is vervolgens weg.

So long, and thanks for all the fish!


Acties:
  • +1 Henk 'm!

  • Puc van S.
  • Registratie: Maart 2002
  • Laatst online: 15:31
Tunaflish schreef op maandag 10 april 2017 @ 09:41:
[...]

Dat scheelt :+

[...]

Het maakt niet uit met wat voor bestand ik het doe: JSON, pdf, jpg, alles laat heel kort een wit scherm zien en is vervolgens weg.
Als ik het in JSFiddle uitvoer krijg ik een popup melding, toevallig iets van een popupblocker/addblocker ertussen?

[http://www.okbreijnen.nl] [Overwatch] [Cennahysh]


Acties:
  • 0 Henk 'm!

  • Tunaflish
  • Registratie: Februari 2010
  • Laatst online: 05-09 16:56
Nope. Heb Firefox al verteld dat popups voor die pagina mogen. Daarnaast houdt die het doorgaans ook al tegen vóórdat de boel opent, en niet daarna.

So long, and thanks for all the fish!


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • Klaasvaak
  • Registratie: Maart 2010
  • Laatst online: 31-08 10:04
Heb je een addblocker geinstalleerd? Die willen nog wel eens de oorzaak zijn van direct sluitende tabbladen.

Acties:
  • 0 Henk 'm!

Verwijderd

Klaasvaak schreef op maandag 10 april 2017 @ 14:04:
Heb je een addblocker geinstalleerd? Die willen nog wel eens de oorzaak zijn van direct sluitende tabbladen.
Confirmed - uBlock Origin en Ghostery uitgezet, en het werkt.

Acties:
  • 0 Henk 'm!

  • Tunaflish
  • Registratie: Februari 2010
  • Laatst online: 05-09 16:56
Klaasvaak schreef op maandag 10 april 2017 @ 14:04:
Heb je een addblocker geinstalleerd? Die willen nog wel eens de oorzaak zijn van direct sluitende tabbladen.
Dat ik daar niet aan heb gedacht... 7(8)7
Adblocker uitgezet en het werkt d:)b

@Puc van S.: Ik zie nu dat je het in jouw bericht ook al over een adblocker had; overheen gelezen, las alleen de popupmelding van browsers zelf, en dat was 'em niet. Klaasvaak en jij mogen de punten delen :+

[ Voor 26% gewijzigd door Tunaflish op 10-04-2017 15:13 ]

So long, and thanks for all the fish!

Pagina: 1