diff --git a/pkg/emscripten/proto.html b/pkg/emscripten/proto.html
index fadc1ffa13..c759e8174f 100644
--- a/pkg/emscripten/proto.html
+++ b/pkg/emscripten/proto.html
@@ -94,6 +94,9 @@
+
diff --git a/pkg/emscripten/proto.js b/pkg/emscripten/proto.js
index b497df3f09..7600129776 100644
--- a/pkg/emscripten/proto.js
+++ b/pkg/emscripten/proto.js
@@ -337,3 +337,40 @@ $(function() {
//$('#dropdownMenu1').text(localStorage.getItem("core"));
});
});
+
+function keyPress(k)
+{
+ kp(k, "keydown");
+ setInterval(function(){kp(k, "keyup")}, 1000);
+}
+
+kp = function(k, event) {
+ var oEvent = document.createEvent('KeyboardEvent');
+
+ // Chromium Hack
+ Object.defineProperty(oEvent, 'keyCode', {
+ get : function() {
+ return this.keyCodeVal;
+ }
+ });
+ Object.defineProperty(oEvent, 'which', {
+ get : function() {
+ return this.keyCodeVal;
+ }
+ });
+
+ if (oEvent.initKeyboardEvent) {
+ oEvent.initKeyboardEvent(event, true, true, document.defaultView, false, false, false, false, k, k);
+ } else {
+ oEvent.initKeyEvent(event, true, true, document.defaultView, false, false, false, false, k, 0);
+ }
+
+ oEvent.keyCodeVal = k;
+
+ if (oEvent.keyCode !== k) {
+ alert("keyCode mismatch " + oEvent.keyCode + "(" + oEvent.which + ")");
+ }
+
+ document.dispatchEvent(oEvent);
+ document.getElementById('canvas').focus();
+}
\ No newline at end of file