2010-07-27 5 views
2

J'écris un HTA et j'ai besoin de passer une variable que j'ai en Javascript à une fonction VBScript. Pouvez-vous s'il vous plaît laissez-moi savoir comment faire cela? Voici un (chômée) exemple de ce que je suis en train de faire:Comment passez-vous une variable javascript en tant qu'argument à une fonction vbscript (dans le contexte des HTA)?

<!DOCTYPE ... > 
<html> 
<head>  
    <HTA:APPLICATION ID="chrome" APPLICATIONNAME="kiosk" ... /> 
    ... 
    <script type="text/javascript"> 
     ... 
     var closer = "C:\Program Files"; 
     ... 
    </script> 
    <script language="VBScript" src="close.vbs"></script> 
</head> 
<body> 
<a href="#" onClick="VBScript:CloseExplorerWindow(window.closer)">close</a> 
</body> 
</html> 

S'il vous plaît garder à l'esprit que cet exemple est waaaay trop simpliste - J'ai juste essayé de dépouiller toute la complexité et vous présenter ce c'est en fait que j'essaye de faire. Bonus: Est-il possible de déclencher une fonction VBScript à partir d'une fonction JavaScript? Mon HTA utilise beaucoup jQuery et ce serait sympa de pouvoir faire les choses système que je dois faire depuis jQuery.

Répondre

4

Si une fonction est définie dans VBScript, elle peut être exécutée à partir de JavaScript comme s'il s'agissait d'une autre fonction disponible dans le monde entier. Les deux langages de script partagent des variables et des fonctions globales. Je l'habitude d'utiliser une fonction pour que je puisse accéder MsgBox de mon code JavaScript en utilisant ce qui suit:

<script type="text/vbscript"> 
Function vbsMsgBox (prompt, buttons, title) 
    vbsMsgBox = MsgBox(prompt, buttons, title) 
End Function 
</script> 
<script type="text/javascript"> 
vbsMsgBox("This is a test", 16, "Test"); 
</script> 

L'ordre d'inclusion est importante lors du mélange de ces scripts. Si le premier script de votre page est vbscript, il devient le moteur de script par défaut pour les gestionnaires d'événements. Si le premier est javascript, ce serait la valeur par défaut. Fournir vbscript: ou javascript: est une idée fausse commune - en JavaScript, une chaîne suivie d'un deux-points indique un label souvent associé à des boucles et à des instructions break/continue. Dans VBScript, cela provoquerait juste une erreur. Cette confusion découle de la méthode d'exécution du script à partir d'une URL, par ex. dans le href d'un élément <a>:

<a href="javascript:doSomething(); void(0);">do something</a> 

Avec votre exemple de code, en supposant closer est une variable globale, votre gestionnaire d'événements devrait ressembler à ceci:

<a href="#" onclick="CloseExplorerWindow(closer)">close</a> 

Aussi, jetez un oeil à ce MSDN article sur l'utilisation JScript and VBScript on the same page.

+1

Légende absolue, vous avez tout à fait raison :). Merci pour le lien aussi, cela explique beaucoup. C'est mon premier HTA et je n'ai pas encore beaucoup travaillé sur VBScript, donc c'est un tout nouveau domaine pour moi. –

1

Votre exemple devrait fonctionner, assurez-vous de ne pas faire ce que vous attendez car var closer = "C:\Program Files"; devrait être var closer = "C:\\Program Files";?