2015-03-24 1 views
0

J'ai créé une petite application, qui devrait effectuer une action lorsque vous appuyez sur entrée. Lorsque j'ouvre le code HTML dans un navigateur, cela fonctionne comme je le veux, mais quand je l'ouvre comme une application Chrome, il ne fonctionne pas. Voici le code html:Entrer pour soumettre dans l'application de chrome

<input type="text" id='command' onkeydown="keyDown()"> 

Et voici le Javascript:

function keyDown() { 
    if (event.keyCode == 13) { 
     var command = document.getElementById('command'); 
     var value = command.value; 
     if (value === "exit") { 
      alert('hi'); 
      var mainWindow = chrome.app.window.get('firstInstall'); 
      mainWindow.close(); 
     } else { 
      document.getElementyId('wrong').className = 'unhidden'; 
     } 
    } 
} 

(ne me dérange pas 'else {...} partie)

Dans le navigateur, les alertes de code Salut, comme il se doit. C'est comme ça que je sais que ça marche dans le navigateur. L'application Chrome ne fonctionne pas. Quelqu'un peut-il aider? Merci!

+0

Votre 'id = 'commande' n'est jamais fermée. il suffit d'ajouter '' 'à la fin de la commande dans votre code HTML –

+0

Désolé, il est en fait fermé. Quelque chose s'est mal passé en copiant le code à la poste. –

Répondre

1

Je présume que votre HTML est en fait la citation de clôture sur l'attribut ID, comme

<input type="text" id='command' onkeydown="keyDown()"> 

(Sinon, cela entraînera d'autres problèmes pour vous)

La vraie question, cependant, est que les applications Chrome n'autorisent pas le texte JavaScript dans les fichiers HTML. Cela s'applique à la fois aux scripts en ligne et aux attributs d'événement, tels que onkeydown, et fait partie des mesures de sécurité que les applications Chrome implémentent pour s'assurer que votre application n'exécute pas de JavaScript non sécurisé.

La façon de résoudre ce problème est d'avoir un morceau de JavaScript qui attache un écouteur d'événement à la balise <input>, comme ceci:

document.getElementById('command').addEventListener('keydown', keyDown); 

Ce attacheront la fonction keyDown() comme auditeur à l'événement onkeydown sur l'élément avec l'ID command.

Vous pouvez en savoir plus sur addEventListener ici: https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener

Et plus sur la politique de sécurité de contenu qui mettent en œuvre des applications Chrome est ici: https://developer.chrome.com/apps/contentSecurityPolicy

+0

Merci beaucoup! ça fonctionne vraiment. –

-2

à la fonction keyDown, définir objet événement (mot-clé) comme ci-dessous:

<input type="text" id='command' onkeydown="keyDown(event)"> 

à travers lequel objet événement sera accessible variable locale en fonction:

function keyDown(event){ 
    if(event.keyCode == 13) { 
     var command = document.getElementById('command'); 
     var value = command.value; 
     if(value === "exit"){ 
      alert('hi'); 
      var mainWindow = chrome.app.window.get('firstInstall'); 
      mainWindow.close(); 
     } else { 
      document.getElementById('command').className = 'unhidden'; 
     } 
    } 
} 
+0

Vous devriez lire l'autre réponse pour comprendre pourquoi la vôtre est incorrecte. – Xan

+0

Sans compter qu'il ne tente même pas de gérer le problème du gestionnaire qui ne fonctionne pas. Ou a tout à fait du sens, pour être honnête: 'event' est indéfini dans le contexte du code inline dans' onkeydown'. – Xan