在Windows Store Javascript应用程序中使用Ace编辑器

时间:2012-12-30 06:33:39

标签: javascript windows-store-apps ace-editor

所以我试图在我正在研究的Windows 8 JavaScript应用程序中嵌入ACE,并且遇到了一些麻烦。这是我的代码,用于将我的<pre id="ace-editor">元素转换为Ace编辑器。

WinJS.Utilities.ready(function ()
{
    var editor = ace.edit('ace-editor');

    editor.setTheme('ace/theme/monokai');

    editor.getSession().setMode('ace/mode/javascript');
    editor.getSession().setTabSize(4);
    editor.getSession().setUseSoftTabs(false);
    editor.setShowPrintMargin(false);

});

首先,出现了一个重复的光标,有一点位置和闪烁的时间偏移。请看下面的图片。

其次,一旦我创建了编辑器,我必须调用每个方法两次,这样我就可以在编辑器对象上更改属性。例如,请看下面的代码:

editor.setTheme('ace/theme/clouds');
editor.setTheme('ace/theme/clouds');

这是我需要做的改变主题的方法。调用setTheme()方法一次就不会这样做。

现在,我是Windows Store开发的新手,但经过一些麻烦后,如果删除默认添加的核心UI样式表,我可以让光标消失。核心JS文件也是如此。如果我删除那些,双击问题就会消失。这里有没有人得到解决方案或线索,为什么会发生这种情况?我正在使用Ace的非冲突版本,但我也试过了另一个版本。而且我认为这听起来更像是一个WinJS问题而不是Ace,但如果这里有人可以帮助我,那就太好了。

谢谢!

更新

对于重复光标,似乎ACE未正确检测Windows应用商店应用环境,因为它在其用户代理中未使用字符串“Microsoft Internet Explorer”。相反,它是“MSAppHost / 1.0”或其他东西。所以我改变了我的ace.js,现在我发现了两者。这是更新后的代码:

(navigator.appName=="Microsoft Internet Explorer"||navigator.appName.indexOf("MSAppHost")>=0)

谢谢,user1743328!

1 个答案:

答案 0 :(得分:3)

对于第二个游标,请参阅https://github.com/ajaxorg/ace/blob/master/lib/ace/virtual_renderer.js#L79可能它只是不识别win8 useragent为IE