0

因此,我尝试将 ACE 嵌入到我正在开发的 Windows 8 JavaScript 应用程序中,但遇到了很多麻烦。这是我用来将我的<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 应用商店开发的新手,但经过一番折腾,如果我删除默认添加的核心 UI 样式表,我可以让光标消失。核心 JS 文件也是如此。如果我删除它们,双重射击问题就会消失。这里有没有人知道为什么会发生这种情况的解决方案或线索?我正在使用 Ace 的非冲突版本,但我也尝试过另一个版本。而且我想这听起来比 Ace 更像是一个 WinJS 问题,但如果这里有人可以帮助我,那就太好了。

谢谢!

更新:

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

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

谢谢,用户1743328!

4

1 回答 1

3

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

于 2012-12-31T15:54:41.920 回答