【问题标题】:Using Ace editor in Windows Store Javascript app在 Windows Store Javascript 应用程序中使用 Ace 编辑器
【发布时间】:2013-01-01 13:18:36
【问题描述】:

因此,我尝试将 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);

});

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

其次,一旦我创建了编辑器,我必须调用每个方法两次,这样我才能更改我的编辑器对象的属性。例如,看下面的 sn-p:

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

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

现在,我是 Windows 应用商店开发的新手,但经过一番折腾后,如果我删除默认添加的核心 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!

【问题讨论】:

  • 您需要提供足够多的代码以及使用它的上下文,最好是骨架足以重现问题。我猜在光标问题上,您需要查看该 UI 样式表并找到光标样式定义的位置并弄清楚如何覆盖它们。两次调用方法的问题,是什么意思?您字面意思必须调用它们两次(一个接一个),或者您调用它们,然后稍后或其他地方也调用它们?如果删除第一个,第二个有用吗?它是在某个事件上被调用的吗?细节,细节。
  • 那里。我添加了更多细节。至于核心 JS 和 CSS 资产,我无法更改它们,因为它们是从 Windows 库链接的。
  • 好吧,我一直在研究 ACE 处理光标的方式,它本质上是拦截编辑器中的所有鼠标和按键操作,并在一个小的“光标宽度”下按层操作内容" textarea 在页面中穿梭,但从不接受已输入的任何字符。唔。所以你所描述的听起来像textarea 没有正确显示,可能是由于ACE 文件的加载方式或其他一些冲突。你有JS debugger 设置吗?
  • 是的,这正是 Ace 所做的。我使用 DOM Explorer(Visual Studio 调试工具的一部分)看到一个小的 <textarea> 漂浮在周围。现在如何重新设置它的样式,使其与另一个光标“同步”。
  • 运行的时候有没有JS错误? ACE 使用pointer-eventsthis answer 表示 IE 不支持。据我了解,Metro 应用程序是一种网络浏览器(或多或少),所以我想知道 ACE 处理此问题的方式在 Metro 中是否存在问题? ACE 是否明确表示它在 ACE 中有效?或者您是否知道任何其他已经使用它并且具有您可以访问的源代码的项目?很遗憾,我没有安装 Win8 的开发环境。

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


【解决方案1】:

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

【讨论】:

  • 你是一个救生员,伙计!现在,JS 问题我都准备好了!
  • js 问题只发生在 setTheme/Mode 上吗?如果是,可能需要或脚本加载事件有问题,请参阅github.com/ajaxorg/ace/blob/master/lib/ace/lib/net.js#L56
  • 如果我在第一次调用后检查 DOM 结构,似乎脚本被添加到 <head> 中,但仅此而已。对于一个主题,它还需要为导入的 CSS 添加一个 <style><head> 但除非我第二次调用该方法,否则它不会。而setMode() 也导入了 JavaScript 文件,但没有正确执行回调。
  • @alizahid 嘿,我正在处理它,您只需将所有该死的主题和脚本拖放到 default.html 中即可生成正确的引用。它现在可以工作了 :D 哦......你不需要再设置两次主题了 :D
  • @RobertGawdzik 那么它可能与 WinJS 如何加载这些东西有关。感谢您的发现!
猜你喜欢
  • 1970-01-01
  • 2022-06-23
  • 1970-01-01
  • 2015-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多