【问题标题】:Enter to submit in chrome app输入在chrome app中提交
【发布时间】:2015-03-24 15:40:55
【问题描述】:

我创建了一个小应用程序,它应该在按下回车键时执行一个操作。当我在浏览器中打开 html 时,它会像我想要的那样工作,但是当我将它作为 chrome 应用程序打开时,它不会。这是html:

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

这里是 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';
        }
    }
}

(不要介意 'else{...}' 部分)

在浏览器中,代码会提示“嗨”,就像它应该的那样。这就是我知道它在浏览器中工作的方式。 chrome 应用程序虽然不起作用。 任何人都可以帮忙吗?谢谢!

【问题讨论】:

  • 您的id='command 永远不会关闭。只需在您的 html 中的命令末尾添加 '
  • 很抱歉,它实际上已关闭。将代码复制到帖子时出错了。

标签: javascript html forms google-chrome-app enter


【解决方案1】:

我认为您的 HTML 实际上在 ID 属性上有结束引号,例如

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

(如果没有,那会给你带来其他问题)

不过,真正的问题是 Chrome 应用程序不允许在 HTML 文件中使用 JavaScript 文本。这既适用于内联脚本,也适用于 onkeydown 等事件属性,并且是 Chrome 应用为确保您的应用不会执行不受信任的 JavaScript 而实施的安全措施的一部分。

解决此问题的方法是使用一段 JavaScript 将事件侦听器附加到 &lt;input&gt; 标记,如下所示:

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

这会将keyDown() 函数作为侦听器附加到ID 为command 的元素上的onkeydown 事件。

您可以在此处阅读有关addEventListener 的更多信息:https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener

有关 Chrome 应用程序实施的内容安全政策的更多信息,请点击此处:https://developer.chrome.com/apps/contentSecurityPolicy

【讨论】:

    【解决方案2】:

    在keyDown函数中,定义事件对象(关键字)如下:

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

    通过它,事件对象可以作为函数中的局部变量访问:

    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'; 
            }
        }
    }
    

    【讨论】:

    • 您应该阅读其他答案以了解为什么您的答案不正确。
    • 更不用说它甚至没有尝试处理处理程序不运行的问题。或者说有什么意义,老实说:eventonkeydown 的内联代码上下文中是未定义的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2016-10-07
    • 1970-01-01
    相关资源
    最近更新 更多