戯れにキーイベントキャプチャーした
先週ぐらいに公開予定だったCSInterfaceクラスは諸々の事情により更に掘り下げる作業を敢行しております。まあ、某社がもう少し親切にドキュメント化していてくれれば、わたしがこんな事する必要は無いのですが…
と言う事で今回も非常に短い物でごまかしておきます。
調査途上でキーイベントを捉える作業を行うのですが、その結果を掲載しておきます。ほぼ役に立たない情報です、流し読み推奨w
と、言う訳で以下をご覧下さい。
CEF側でのキーイベントのペイロード(OSX、キー値Ctr+z)
Key Event Return
originalEvent : [object KeyboardEvent]
type : keydown
isDefaultPrevented : function Y(){return!1}
timeStamp : 1387159597426
jQuery20207154332047794014 : true
keyCode : 90
key : undefined
charCode : 0
char : undefined
which : 90
view : [object Window]
target : [object HTMLBodyElement]
shiftKey : false
relatedTarget : undefined
metaKey : false
eventPhase : 3
currentTarget : [object HTMLDocument]
ctrlKey : true
cancelable : true
bubbles : true
altKey : false
delegateTarget : [object HTMLDocument]
handleObj : [object Object]
data : null
isPropagationStopped : function Y(){return!1}
isImmediatePropagationStopped : function Y(){return!1}
preventDefault : function (){
var e=this.originalEvent;
this.isDefaultPrevented=U,
e&&e.preventDefault&&e.preventDefault()
}
stopPropagation : function (){
var e=this.originalEvent;
this.isPropagationStopped=U,
e&&e.stopPropagation&&e.stopPropagation()
}
stopImmediatePropagation : function (){
this.isImmediatePropagationStopped=U,
this.stopPropagation()
}
プロパティを全て抽出してみました。OSXのCommandキーはjQuery自身がサポートしていないようです。これはjQueryにパッチを当てないと拾えませんね…
追記、バブリングがおかしくって拾えないと思い込んでいました。しかしながらIDではmetaKey拾えちゃいました。そうなのです。AIではmetaKeyだけが拾えなくなっているのです。
(function () {
‘use strict’;
var csInterface = new CSInterface();
// Opens the chrome developer tools in host app
function showDevTools() {
window.__adobe_cep__.showDevTools();
}
// Reloads extension panel
function reloadPanel() {
location.reload();
}
function init() {
themeManager.init();
$(“#btn_reload”).click(reloadPanel);
$(“#btn_dev”).click(showDevTools);
$(“#test”).click(function () {
//var fl = cep.fs.showOpenDialog(false,false,”Select File”,null,[])
//var cb = csInterface.getExtensions([“com.adobe.exchange”]);
//for (var a in window.__adobe_cep__){
document.getElementById(“message”).innerHTML
//+= a + “<br />”;
//}
= “not effective…”;
});
}
window.onkeydown = khandle;
window.onkeyup = khandle;
window.onkeypress = khandle;
function khandle(e) {
var evt = e.type;
evt +=
‘ keyCode=’ + e.keyCode +
‘ which=’ + e.which +
‘ charCode=’ + e.charCode +
‘ char=’ + String.fromCharCode(e.keyCode || e.charCode) +
(e.metaKey ? ‘ +meta’ : ”);
document.getElementById(“message”).innerHTML += evt + “<br />”;
}
init();
}());
こんなかんじのスクリプトでHTMLにキーイベントを返してみました。どうあがいてもmetaKeyだけ反応しないのです。Bugぽいですが、わざとこんな実装している様な気もします。dispatchも効きませんが、もう少し調べてBugTrackにかけるかどうか判断しようと思います。