Lancer une navigation, puis l'impression, le tout dans une frame ?

Lancer une navigation, puis l'impression, le tout dans une frame ? - Javascript/Node.js - Programmation

Marsh Posté le 19-10-2018 à 10:19:39    

Bonjour HFR :)
 
Aujourd'hui, dans le cadre d'un développement au boulot, je me retrouve bloqué face à une situation pour laquelle je ne trouve aucune solution fonctionnelle :/
Pardon à l'avance pour la catégorisation de ce topic, mais (vous le verrez) je ne sais pas laquelle lui correspond le mieux entre .NET, C#, VBS et pur HTML+JS...
 
Le contexte est assez "dense", le voici :
Il s'agit d'un site Web interne, reposant sur 5 projets d'applications .NET écrits dans différents langages (de nombreux développeurs se sont succédé au fil des années).
L'UI de base (appelons-la "coquille" ) est écrite en ASP Classic (HTML/JavaScript + VB Script), et fait appel via des iframe à d'autres projets (appelons les "api" ) plus récents (ASP .NET MVC avec C# et VB .NET).
Toutes ces applications sont articulées autour d'une base de données SQL Server unique (ouf, c'est déjà ça ;)).
 
C'est justement cette répartition qui me pose actuellement problème : depuis une page de la "coquille" (disons "dashboard.asp" ), j'affiche dans une <iframe/> une page d'un projet MVC (disons "User/Dashboard" ) qui me retourner une vue (disons "Dashboard.cshtml" ) contenant des données provenant de la base de données dans un tableau, jusque là, si vous avez suivi, tout fonctionne.
Pour une évolution récente, j'ai besoin d'ajouter un bouton "Print" sur chaque ligne de ce tableau, qui est sensé générer un bon de commande et le sortir à l'impression.
 
Le problème, c'est que ce bon de commande est généré par une page du projet "coquille" (disons "boncommande.asp?id=xxx" où xxx correspond à l'id de la ligne du tableau).
Il faut donc que depuis "Dashboard.cshtml" d'un projet MVC, je puisse lancer la navigation vers "boncommande.asp" d'un autre projet, et en lancer l'impression.
 
Là où je bloque, c'est que bien entendu "boncommande.asp" est une page qui ne sert pas qu'à l'impression et dispose donc de ses feuilles de style et script appliqués à l'ouverture ( document.ready()).
Du coup, aucune des techniques que j'ai utilisées (qui consistent à chaque fois à ajouter une <iframe/> invisible ou d'ouvrir une nouvelle windows Javascript) ne peuvent fonctionner.
Au mieux, j'ai le style qui s'applique, mais (et c'est bien normal) aucun script n'est exécuté (et donc certains éléments de la page ne sont pas calculés/initialisés).
Enfin, j'ai essayé le bon vieil appel AJAX injecté dans le .html() d'une <div/> invisible, mais je me heurte évidemment à la barrière de l'appel AJAX cros-domain entre mon appli "coquille" et mon "api" MVC.
 
Alors déjà, merci aux quelques courageux qui auront lu jusque là :D
Ensuite, avez-vous une idée ?
 
Je suis persuadé qu'il y a un truc bien plus simple à faire (tout transférer côté MVC peut être, et générer un PDF depuis une méthode FileResult ?), mais je bloque depuis des jours, j'ai le nez dedans, j'ai les idées embrouillées, je pense qu'un oeil externe m'aiderait :jap:
 
Merci à vous :)
:hello:


---------------
La DiBerie | Rehost | Link
Reply

Marsh Posté le 19-10-2018 à 10:19:39   

Reply

Marsh Posté le 19-10-2018 à 18:06:10    

J'ai rien compris, mais si le seul problème est lié a des problème de communication entre les iframes à cause de crossdomain policy,  ça doit pouvoir se régler en autorisant certain domain à communiquer entre eux...
 
Par exemple en spécifiant le même domaine dans ta page principal et dans tes iframes :

Code :
  1. <script>
  2. document.domain = 'mon-nom-de-domaine';
  3. </script>


 
Tu as la main sur tous les scripts ?
 
Car si oui, tu doit pouvoir créer une fonction au niveau du dessus qui appelle de window.print() dans ton iframe une fois le rendu final effectues.


---------------
D3
Reply

Marsh Posté le 20-10-2018 à 07:47:10    

Bonjour Mechkurt.
 
Merci pour ta réponse.
En effet, c'est une solution comme ça que j'ai implémentée à défaut de mieux : je propage un paramètre dans la query qui traverse les projets (= la src de mon iframe, qui pointe vers le projet MVC).
Je détecte ce paramètre au document.load(), et déclenche un window.print().
 
En faisant comme ça, je m'affranchis du cross domain policy.
Il me reste quelques trucs à gérer (le CSS et les scripts à appliquer à la nouvelle window générée), mais dans l'ensemble, ça me semble être la bonne piste :jap:
 
Merci :jap:


---------------
La DiBerie | Rehost | Link
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed