我写了 a text editor in JavaScript that draws directly to a Canvas element (出于各种原因,但我的主要原因是我可以将该 Canvas 作为纹理贴在 WebGL 网格上)。令人高兴的是,实现我发现的任何内容可编辑解决方案都更容易。
我很早就注意到的一件事是使用 en-US QWERTY 以外的键盘布局的人提示某些键显示不正确的字母。在对 Windows 的语言设置和屏幕键盘进行了一些摆弄之后,我创建了一个基于代码页的解决方案,该解决方案将 keyCode 直接映射到不同语言环境的字符串,而不是仅仅假设“没有修饰键的 keyCode 51 是数字 3 ”。因为它不是,所以在某些键盘上它是双引号。
但仍然有一些奇怪的地方。几个例子(请注意,所有这些例子都是基于使用 Windows 屏幕键盘,所以我只是假设这与现实相关):
最佳答案
您无法获得键盘布局...
没有办法(使用纯 JS 解决方案)检测用户的键盘布局。
请注意,“en-US”或“en-GB”不会映射到这些语言的任何特定/商定的键盘布局。用户的语言与他们的键如何映射到字符无关。
您可以根据他们的 locale / language code 做出假设,但这并不能提供任何保证 - 它只会增加您迎合适当布局的可能性。
另请参阅以下问题:
Translate Javascript keyCode into charCode for non-U.S. keyboard layout (i.e. azerty)
Detect keyboard layout with javascript
...但你可以用它输入字符:
但是,根据您所需的浏览器支持(使用 Canvas 应该很好),您可以尝试使用 charCode
属性(property):
http://www.w3schools.com/jsref/event_key_charcode.asp
var unicodeCharCode = e.charCode;
The Unicode character code is the number of a character (e.g. the number "97" represents the letter "a").
var userInput = String.fromCharCode(unicodeCharCode);
关于javascript - 国际键盘如何处理 JavaScript 键盘事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27861122/
使用Node.js服务器,我想知道是否可以并建议从委托(delegate)工作进程而不是主进程发送HTTP响应。这些工作进程本身可以是Node.js服务器,或者只是通过IPC进行通信的Node.js子进程。我不认为集群核心模块https://nodejs.org/api/cluster.html可以做我想做的事,因为在那个模型中,所有的worker都在同一个端口上监听,他们代表主进程处理所有请求。我正在寻找的是一个主要的Node.js进程,它响应所有HTTP请求,可能进行身份验证和处理一些请求,但也能够将数据密集型或CPU密集型请求委托(delegate)给工作池。假设我们有一个获取大
我的代码是$scope.loadQuestions=function(){$scope.questionCount=0;$scope.questionTable=newNgTableParams({count:[]},{total:19387,getData:function($defer,params){$scope.filter.sort=params.orderBy();$scope.filter.page=params.page();return$http.get("/api/questions",{params:$scope.filter}).then(function(re
我正在使用jspm和SystemJS导入ES2015模块。是否可以通过System对象或其他任何地方获取项目中所有导入模块的列表?我可以通过System._loader.moduleRecords访问我的项目特定模块,但是我通过jspm安装的模块(例如,d3、jquery)不会出现在这个列表中。System._loader.modules包含所有模块的列表,但遗憾的是还包含转译我的代码和模块加载包所需的模块列表。System._loader.moduleRecords(项目模块)System._loader.modules(项目模块、库、转译包)我只想要一个已声明导入的列表,特别是那些
是否允许将自定义值保存在Chrome扩展的manifest.json中?因为是json,所以我想在manifest.json中保存一些信息,特别是因为ChromeAPI可以用于Opera,我需要一些区分数据。如果manifest.json中有任何自定义数据,Chrome商店会提示吗? 最佳答案 不,不允许在Chrome扩展manifest.json文件中使用自定义值。您可以引用下面给出的链接。@约翰https://developer.chrome.com/extensions/manifest您只能在manifest.json中使用
我有一个包含这些url的数组:["path/to/url1","path/to/url2","path/url/unicóde.txt"]我正在使用angular,通过ng-repeat我创建了一个可点击的列表,该列表执行重定向到所需的url,但是,当我点击unicodeurl时,浏览器无法找到它。我尝试使用encodeURI("path/url/unicóde"),但它检索到的是:path/url/unic%C3%B3de.txt未找到。相反,当我手动访问时:path/url/unicóde.txt(这是在ftp中,因此,我逐个文件夹直到到达文件)浏览器中的url现在说:path/u
我正在使用WebRTC编写我的第一个点对点连接应用程序,我通过socket.io连接发送的用于从对等点请求icecandidate的代码触发了6次而不是一次。这真的很令人困惑,因为如果我错误地设计了一个大请求循环,我会期望无限递归,而不仅仅是6(8个onicecandidate事件)。那么谁能告诉我为什么下面的代码会产生6个递归?这里是消息处理程序,它只是发送一条由语法控制的socket.io消息:Muveoo.Messenger.input('icecandidaterequest',data);'icecandidaterequest':function(data){console
我正在尝试构建一个带有服务器组件的Electron应用程序,使用express进行远程控制。express模块初始化为varstaticPath=path.resolve('app/assets')setupNotifications(server);app.use(cors());app.use('/api/',json());app.use('/api/',router);app.use('/assets',express.static(staticPath));console.log('servingstaticfilesfrom:'+staticPath);Elecrondoc
我有以下设置并且我的错误/堆栈跟踪有问题我是否遗漏了什么?package.json看起来像:{"name":"xxxxxx","main":"server.js","private":true,"scripts":{"start":"nodemon--exec./node_modules/.bin/babel-nodeserver.js"},"dependencies":{"babel":"^6.5.2","babel-cli":"^6.6.5","babel-preset-es2015":"^6.6.0","babel-preset-react":"^6.5.0","babel-pr
ECMAScript规范定义了UseStrictDirective,但允许实现定义自己的指令。来自here:ImplementationsmaydefineimplementationspecificmeaningsforExpressionStatementproductionswhicharenotaUseStrictDirectiveandwhichoccurinaDirectivePrologue.什么是已知的特定于实现的指令?在Google上快速搜索一下,除了usestrict什么也没有。我能想到useasm和usestrong.还有其他的在用吗?
基于mozilla开发者网络https://developer.mozilla.org/en-US/docs/Web/API/NavigatorOnLine/onLine它说Returnstheonlinestatusofthebrowser.Thepropertyreturnsabooleanvalue,withtruemeaningonlineandfalsemeaningoffline.Thepropertysendsupdateswheneverthebrowser'sabilitytoconnecttothenetworkchanges.Theupdateoccurswhen