2017-08-25 7 views
1

Cette réponse here indique que je ne peux pas passer d'en-têtes lors de l'utilisation de window.open. Bien que je ne pouvais pas trouver de documentation indiquant cela.Possibilité d'ajouter des en-têtes dans une fenêtre window.open request

Est-ce vraiment impossible? Y a-t-il des hacks possibles?

Mes demandes client sont envoyées à un serveur que je ne peux pas contrôler. La demande envoyée par le navigateur pour l'ouverture de pdf (window.open) est reçue sur ce serveur sans les en-têtes auth. Par conséquent, l'utilisateur est invité à entrer un nom d'utilisateur et un mot de passe.

Y at-il un moyen de résoudre mon problème et de pouvoir ouvrir le pdf à partir de mon application Angular. Je voudrais aussi savoir comment fonctionne window.open en interne car je ne pouvais pas le trouver en ligne?

Merci à l'avance

+0

https://stackoverflow.com/questions/23138671/how-to-add-authentication-header-to-window-open –

+0

La spécification ne donne aucune indication que cela est prévu, même si les paramètres de requête sont également de nature de l'en-tête ... https://www.w3schools.com/jsref/met_win_open.asp – Mijago

+0

Copie possible de [window.open avec en-têtes] (https://stackoverflow.com/questions/4325968/window-open-with- en-têtes) – Mijago

Répondre

0

j'ai pu résoudre le problème en obtenant le fichier deux fois, une fois à partir du serveur et une fois de cache. Cela nécessitait un en-tête Cache-Control sur la réponse. Je travaille avec Angular, AdalJS et Web Api, mais cela pourrait s'appliquer plus largement.

J'utilise un appel $ http avec en-tête auth ajouté par AdalJS pour récupérer le fichier en toute sécurité. Cette réponse est mise en cache par le navigateur. Une fois terminé, j'utilise window.open pour ouvrir le fichier mis en cache.

Le blocage des fenêtres contextuelles peut poser un problème. Si vous ne pouvez pas désactiver le blocage, pensez à afficher un deuxième bouton à cliquer lorsque le téléchargement est terminé, en appelant window.open à partir de ce dernier.