2016-03-29 1 views
0

Pour autant que j'ai pu le dire, personne n'a posé cette question sur un forum (StackOverflow ou ailleurs).Comment fermer une fenêtre à partir de PeopleCode?

Mon problème

Voici ce que je dois faire. Au bureau d'embauche, ils ont un ordinateur qui est utilisé uniquement pour prendre des I9 des gens. Cela arrive très souvent. À la toute fin, nous voulons être en mesure de fermer la fenêtre de navigation, car alors le cache, les cookies (et les informations de connexion) sont supprimés du kiosque I9.

Existe-t-il un moyen de fermer la fenêtre de navigateur actuelle à l'intérieur de PeopleCode?

Ce que j'ai essayé

Je sais que la fermeture d'une fenêtre est trivial en JavaScript. Vous mettez simplement window.close() et la fenêtre du navigateur se ferme. Si je pouvais le faire dans PeopleCode, mon problème serait résolu. Je n'ai trouvé aucun moyen de le faire.
Actuellement, lors de la soumission du formulaire, le code suivant est appelé.

%Response.RedirectURL(GenerateScriptContentURL(%Portal, %Node, Record.WEBLIB_G_I9, Field.ISCRIPT1, "FieldFormula", "IScript_I9_CLOSE_KIOSK")); 

Dans ce fieldformula, le code suivant se produit:

%Response.Write(GetHTMLText(HTML.G_CLOSE_FORM_KIOSK)); 

Voici le contenu du HTML référencé.

You have successfully completed Section 1 of the Form I-9. Now present your documentation to the employment representative to complete Section 2 

<script language="javascript"> 
window.close(); 
</script> 

Le window.close(); n'est pas appelé, et la page affiche seulement le texte brut. Y a-t-il quelque chose que je fais de mal?

J'ai essayé de router vers une page avec seulement une zone HTML, et d'intégrer du JavaScript dans ce HTML, mais cela ne semble pas fonctionner. J'ai placé cette page dans le même composant que le formulaire I9, et j'ai essayé d'appeler TransferPage(Page.Y_CLOSE_WINDOW); Mais cela semble n'avoir aucun effet. C'est à cause de la façon dont les pages sont chargées. Mon idée suivante était de créer un JavaObject dans PeopleCode qui appelle JavaScript (en utilisant soit Rhino, Nashorn, ou javax.script.ScriptEngine), mais c'est plutôt compliqué, et ça m'inciterait à introduire beaucoup de code supplémentaire et jars juste pour lancer une simple commande JavaScript. Je préférerais vraiment ne pas le faire.

Répondre

1

La fermeture d'une fenêtre par window.close() qui a été précédemment ouverte par windows.open() est uniquement autorisée. Je pense que c'est la raison pour laquelle ça ne marche pas.

I.E. votre navigateur l'empêche. S'il existe un hack dans certains navigateurs pour contourner ce problème, c'est un bug de sécurité. par exemple. window.top.close() fonctionne sur IE, mais pas sur Firefox.

Voulez-vous vraiment fermer la fenêtre sans quitter Peoplesoft? Pour déconnecter de la session en cours, vous pouvez utiliser

GetLevel0()(1).CS_SESSION_WK.HTMLAREA.Value = 
    GetHTMLText(HTML.CS_SESSION_LOGOUT, %Request.LogoutURL); 

Avec objet HTML comme

<!% *** Logout Session *** --> 
<script language="JavaScript"> 
    var timer = null 
    function move() { 
     window.location = '%BIND(:1)' 
    } 

    timer=setTimeout('move()',2000) 
</script> 
+0

Tous les navigateurs sur les ordinateurs Kiosk sont mis à vider le cache et les cookies quand ils sont fermés. Donc, tout en se déconnectant en plus de la fermeture serait super, je ne pensais pas que c'était possible. –

+0

Pour autant que je sache, il n'est pas possible de fermer la fenêtre principale du navigateur par javascript, ni d'effacer le cache et les cookies automatiquement.Pourquoi est-il nécessaire d'effacer le cache et les cookies? Pour des raisons de sécurité? –

+0

Je sais que vous ne pouvez pas effacer le cache et les cookies via JavaScript, mais il est possible à travers tous les navigateurs que nous utilisons (surtout Chrome/Firefox) lorsque le navigateur est fermé. Je vais chercher des informations supplémentaires. En passant, je suis capable de faire déconnecter l'ordinateur en appelant '% Response.Redirect (% Request.LogoutURL));' –