Ckeditor5: 与 IE11 (Internet Explorer 11) 的兼容性

创建于 2016-09-15  ·  69评论  ·  资料来源: ckeditor/ckeditor5

长话短说 – CKEditor 5 不适用于 IE11。 使其与 IE11 兼容是一项复杂而漫长的任务 -阅读有关事物状态以及如何提供帮助的更多信息

最有用的评论

亲爱的 CK 5 团队,

首先非常感谢你为这个编辑器付出了这么多的努力。 在OpenProject,我们刚刚对它进行了测试。 与其他编辑器相比,自定义插件的开发要容易得多。 所以我祝贺你的设计决定。 你的编辑真的很棒!

回到 IE 11 主题:

两年前,我们在 OpenProject 进行了一次非常相似的讨论。 我们决定放弃对 IE 11 的支持。我们必须做出决定,是要将时间投入到未来还是过去。 我们决定投资于未来。 回顾过去,我认为这是一个正确的决定。 浏览器格局在过去两年中发生了巨大变化。 我们为大量大型企业和政府组织工作。 他们现在都被允许使用现代浏览器。 所以如果你问他们:_我们是否需要支持 IE 11_,他们都会说 _Yes_。 如果你问他们_你是否允许使用现代浏览器_他们也会说_是_。 如果你问他们_你想要新功能吗_他们也会说_是的_。 如果你问他们_你愿意为支持 IE 11 付出努力吗_他们会说_不_

这些人通过坚持他们的传统世界来减缓整个创新。 如果应用程序开发人员继续支持 IE11,这将减少他们继续前进的压力。

在我看来,更多的人会从诸如 table-support 之类的功能中受益。 或法律要求,例如完全可访问性。

@wwalc@Reinmar@djanosik :在 2020 年 IE11 结束之前为 CK4 提供(付费)长期支持难道不是一个选择吗? 每个想要 CK5 新功能的人都需要现代浏览器?

再次:非常感谢您为社区所做的所有辛勤工作。 我真的很感激。

所有69条评论

单元测试: 2258 次通过。

大多数失败的测试实际上都被破坏了。 那些没有损坏的大部分时间都有错误:

TypeError: Unable to get property 'get' of undefined or null reference

我并没有花更多时间试图找出此类错误的根源,但这将是我的起点。

手动测试:没有一个手动测试可以通过。

每次我从 Bender 收到Deferment unlock timeout - "2" never unlocked.错误时。

超级,谢谢。 如果许多失败的测试共享相同的错误,这通常是个好消息:D。

Symbol相关的转译器或 polyfill 中存在问题,导致此条件始终true 。 attributes 属性永远不会被初始化并抛出 TypeError。 当我解决这个问题时,编辑器开始在 IE11 中崩溃(或挂起)。

有趣……这似乎不是什么棘手的场景,所以 Babel 在这方面失败很奇怪。 你是如何改变它使它起作用的? observable[ attributeSymbol ] ?

不, observable[ attributeSymbol ]是不安全的。 observable.hasOwnProperty( attributeSymbol ) ?

@Reinmar是的, hasOwnProperty效果很好。

所以,我想下一步是运行ckeditor5-utils测试,然后是ckeditor5-engine 。 这可能会让人知道什么是崩溃。 但由于这需要转译代码,我们需要在https://github.com/ckeditor/ckeditor5-dev/blob/master/packages/ckeditor5-dev-tests/lib/utils/automated-tests/getwebpackconfig 中提供支持--es5标志下......我什至认为我们在某个阶段支持它:D)

其他一些问题:

  • document.createTreeWalker错误缺少一些参数。
  • container.remove()上崩溃并挂起,因为remove()函数不存在并且被调用了很多次(比如一百次)。 回调可能存在一些问题。
  • Selection.extend(...)丢失。 当我注释掉这一行时,它开始工作,但选择不可靠。

是的,不错的旧浏览器:|。

我认为在我们开始解决这些问题之前,我们需要弄清楚如何在不膨胀现有代码的情况下做到这一点。 根据您发现的问题,我们似乎需要更多的 polyfill 来处理缺失/过时的方法。 我想知道我们是否可以安全地填充所有这些。

CKE5 的第一个版本有可能在 IE11 中运行吗?

这取决于。 我们不知道我们离让 CKE5 在 IE11 中真正工作还有多远。 我们将在发布 1.0.0 alpha 后检查这一点,看看我们是否能够为 1.0.0 final 带来 IE11 支持。

好,谢谢。 我们决定是否使用 CKE5 取决于它。 不幸的是,我们有许多仍在使用 IE11 的客户:/

我进行了快速搜索,看起来 MS 仍将支持 IE11(只要支持 Win 10): https : ...这意味着至少要到 2020 年底(?) https://support.microsoft.com/en-us/help/13853/windows-lifecycle-fact-sheet~~

亲爱的 CK 5 团队,

首先非常感谢你为这个编辑器付出了这么多的努力。 在OpenProject,我们刚刚对它进行了测试。 与其他编辑器相比,自定义插件的开发要容易得多。 所以我祝贺你的设计决定。 你的编辑真的很棒!

回到 IE 11 主题:

两年前,我们在 OpenProject 进行了一次非常相似的讨论。 我们决定放弃对 IE 11 的支持。我们必须做出决定,是要将时间投入到未来还是过去。 我们决定投资于未来。 回顾过去,我认为这是一个正确的决定。 浏览器格局在过去两年中发生了巨大变化。 我们为大量大型企业和政府组织工作。 他们现在都被允许使用现代浏览器。 所以如果你问他们:_我们是否需要支持 IE 11_,他们都会说 _Yes_。 如果你问他们_你是否允许使用现代浏览器_他们也会说_是_。 如果你问他们_你想要新功能吗_他们也会说_是的_。 如果你问他们_你愿意为支持 IE 11 付出努力吗_他们会说_不_

这些人通过坚持他们的传统世界来减缓整个创新。 如果应用程序开发人员继续支持 IE11,这将减少他们继续前进的压力。

在我看来,更多的人会从诸如 table-support 之类的功能中受益。 或法律要求,例如完全可访问性。

@wwalc@Reinmar@djanosik :在 2020 年 IE11 结束之前为 CK4 提供(付费)长期支持难道不是一个选择吗? 每个想要 CK5 新功能的人都需要现代浏览器?

再次:非常感谢您为社区所做的所有辛勤工作。 我真的很感激。

@lindenthal我想可以使用 CKE4。 但是如何创建无头 CKE4 编辑器? CKE5 是模块化的,用我们自己的 UI 替换 UI 非常容易。

  • _我们需要支持 IE11 吗?_ 是的:/
  • _您可以使用现代浏览器吗?_ 是的,主要是。 但是我们的解决方案也被集成到在现代浏览器中不起作用的遗留系统中。 另外不要忘记 IE11 通常是 Windows 服务器上唯一可用的选项。 没有 Edge,管理员不允许安装 3rd 方应用程序。
  • _您想要新功能吗?_ 当然。 但我认为我们可以在这里找到妥协。 我们需要 CKE5 不会在 IE11 中崩溃并至少支持一些基本的编辑功能。 我可以解释为什么某些功能不可用。 但我无法解释为什么它根本不起作用。
  • _您是否愿意支付支持 IE11 所需的努力?_ 在此不确定。

@djanosik

我确实理解您的担忧,但请允许我夸大一点,以便您更好地了解我的立场。

实际上,您刚刚证实了我的论点:维护不善的遗留应用程序会减慢现代 Web 应用程序的开发速度。 所以像 CKE 开发人员这样的人,你和我都必须受苦。 正如我所说:这些积累了技术债务的公司试图将他们的问题交给其他人。 这实际上意味着这些公司正在要求其他开源开发人员偿还他们的技术债务。

但我想对此还有很多其他意见:-)

最好的事物
尼尔斯

我在一个不幸仍然需要 IE11 的领域工作,并且客户无法轻松升级。 (医院和其他健康部门)我并没有深入研究 IE11 下 CKE5 的实际问题,但过去我不得不处理 IE11 的 polyfilling 类似问题。

有一些条件,但支持 IE11(通过 webpack 魔法)可能是我愿意支付的费用,或者帮助调查和工作。

@caffedian

我建议您先升级到现代浏览器,然后再升级到 CK5。 这种方法有什么问题? 我从来没有听说过有人因为稳定性或安全问题而说他们不能使用现代 Edge、Chrome 或 FF。 你?

@lindenthal
是的,我有。 我们的软件被大公司使用。 我试图停止 IE 支持,但他们说这是默认浏览器。 有许多计算机尚未运行 Win 10,因此没有可用的 Edge。 其他浏览器并不是真正想要的......我很高兴我们只需要支持 IE11 而不是旧的。 IE 世纪尚未结束(尤其是对于公司而言)

@code-克里斯

我想你同意 FF 和 Chrome 在 Windows 7 上都运行得很好,对吧?
即使 IE11 是组织中的默认浏览器,这并不意味着他们不能并行使用 FF。 而对于无法安装FF的极小部分,他们应该坚持使用CK4。

选择 IE11 而不是 FF 的唯一原因是维护不善的遗留 Web 应用程序。 我不知道任何其他原因。

重点是:继续支持 IE 11 的应用程序越多,摆脱它所需的时间就越长。 因此,通过支持 IE 11,我们使这个问题变得更糟。

你知道还有另一群人让我更生气:那些要求支持旧版浏览器和旧版屏幕阅读器(IE11 和 JAWS 15)组合的人。 这种组合真的扼杀了任何用户体验和创新。 你有没有看到这些人中的一些人为他们创造的额外努力付出代价?

@lindenthal
我同意你的看法。 没问题。 我也想立即杀死 IE。 但不幸的是,商业软件很难停止对 IE 的支持。 是的,因为像这样的组件支持更长的 IE,所以这个浏览器完全死掉需要更长的时间。

希望CK5支持IE并不是浏览器的原因:

  • 我们的主要产品现在使用了一个自己编写的编辑器组件,这真的很糟糕。 我想用CK代替它。 但是如果我用CK4替换它,那么我终于有重复的努力了(自写到CK4,后来到CK5)
  • CK4 不支持 Webpack 或有任何其他兼容的解决方案。

在 IE 11 是否应该得到正式支持的争论结束之前,有没有人提出使用外部 polyfill 库的解决方案?

我认为任何认为 IE11 支持不重要的人都是不现实的,我在一家为我们的客户制作软件的大公司工作,他们中的很多人都想要 IE11 支持,我希望他们没有,但他们确实这样做了。

目前我正在开发一个全新的前端,我想在其中使用 ckeditor5,但我不能,因为没有 IE11 支持。 此外,从 ckeditor4 到 5 的升级路径听起来很困难,我们将在转换客户旧数据时遇到问题。 这意味着我们不仅必须使用 ckeditor4,而且我们将永远停留在 ckeditor4 上。

明确地说 - 虽然我们个人都不想努力增加对 IE11 的支持(这种感觉,我可以理解,你理解),这基本上是项目的资金和机会问题。 您可以随时联系我们 (https://cksource.com/contact/) 讨论选项。


我以前错过了这个问题:

@wwalc@Reinmar@djanosik :在 2020 年 IE11 结束之前为 CK4 提供(付费)长期支持难道不是一个选择吗? 每个想要 CK5 新功能的人都需要现代浏览器?

答案可以在我们的帮助中心找到—— “CKEditor 4 将支持多长时间?

CKEditor 4 是一款稳定成熟的应用程序,于 2012 年底首次发布,此后一直在积极开发和改进。 CKEditor 4.x 系列属于“长期支持”(LTS) 计划,这意味着它的开发和支持保证到 2023 年。完美的选择。

@long-lazuli 问了几个如何开始调查 IE11 支持的问题:

我看到主要问题是 es6-class & es6 getter/setter
所以我认为可以用一些 babel 插件来编译它。

请查看https://docs.ckeditor.com/ckeditor5/latest/builds/guides/integration/advanced-setup.html#option -building-to-es5-target。 我希望它会有所帮助。

然后我开始挖掘 babel-plugins 编译,看看我是否可以在旧项目上工作。 我能想象的最好的方法是构建一个专用于此浏览器的 polyfill 文件。

这取决于,TBH,不挖掘就很难说。 首先要做的是:

  1. 确保您将 CKEditor 5 构建到 ES5,因此没有语法错误。
  2. 确保为 ES 的全局变量加载了 polyfill,例如Map/Set/WeakMap/WeakSet/Symbol
  3. 查看缺少的 HTML 全局变量和功能。 在这里,它变得很滑。 有时您可能会尝试加载一些著名的 polyfill。 例如Node#remove()可能需要一个。 但是我们依赖的一些 HTML 功能可能没有合适的 polyfill。 它基本上需要大量测试。 @djanosik已经在https://github.com/ckeditor/ckeditor5/issues/330#issuecomment -311895564 中做了一些研究。
  4. 最后,还有浏览器错误、“不完整的实现”和“它的工作原理为什么不这样;哎呀,这一次它的工作方式不同,因为它可以!”。 在 contentEditable 的世界里,即使在今天也很糟糕。 在 IE11 中,您必须一一解决问题,如果出现这些问题,polyfill 将无济于事。 你可能需要用if ( iAmIE ) { doWeirdStuff() } else { doNormalStuff() }为他们提出 PR。

前两个步骤由 Babel polyfills 提供。 然后,有一个问题是为我们依赖的 HTML 功能查找或编写 polyfill,或者找到根本不需要它们的解决方法(将需要 PR)。 然后,它会变得更黑、更臭,你将追逐 IE11 中很多的 bug 和怪癖。 不过,在这个阶段,编辑器应该已经非常可用了。

无论如何......祝你好运:)

附注。 分享您的工作和发现的最佳方式是:

  1. 分叉https://github.com/ckeditor/ckeditor5和构建 repo 之一。
  2. 修改ckeditor5/mgit.json以使用您的构建分支。
  3. 修改该构建的webpack.config.js以及加载步骤 1-3 所需的所有 polyfill 和内容所需的任何其他内容。

多亏了这一点,下一个人,或者我们,将能够加入并提供帮助。

您可以在https://docs.ckeditor.com/ckeditor5/latest/framework/guides/contributing/development-environment.html 中阅读更多关于开发环境的信息

到目前为止,我已经有了一些似乎正在起作用的东西。 到目前为止我遇到的一切都可以用一些 polyfill 处理,除了一件事:CSS 自定义属性。 我不得不在 webpack.config.js 文件中做一些可怕的事情才能很好地解决这个问题。

但是,我如何将其连接到测试线束? 我制作了一个名为ckeditor5-build-ie11的单独本地存储库。 它是ckeditor5库的同级文件夹,其中使用了mgitlerna等。 我一直在调整packages文件夹下的文件,以便我的更改很容易枚举(即使在我将单个 IE11 polyfill 文件放在一起时它们最终会被撤消。)

好消息

到目前为止,我已经有了一些似乎正在起作用的东西。

🎉 太棒了 :)

我制作了一个名为 ckeditor5-build-ie11 的单独本地存储库

我认为您只需要在该存储库和所有其他涉及的存储库中提交和推送更改。 在所有情况下 - 您都需要对这些存储库的分叉执行此操作。 另外,您必须更改mgit.json以便它指向您的分叉。 像这样:

"@ckeditor/ckeditor5-engine": "tuespetre/ckeditor5-engine#branch-name",

(如果您直接提交master则可以省略#branch-name master

关于一些 webpack 配置和示例——您可以将它们放在主存储库中( ckeditor5的分支)。 从该存储库中,您可以导入所有其他 pkg、一些 polyfill(如果您将安装它们)等。

我目前正在与一些奇怪的插入符作斗争,所以我正在了解更多关于Selection / MutationObserver / contenteditable实现差异的信息,以尝试确定它。 我主要在 IE11、Edge 和 Chrome 之间进行比较。 我在 Edge 中看到了一些奇怪的表面,所以除了支持过时的浏览器之外,这项努力也许可以带来更多好处:trollface:

我在 Edge 中看到了一些奇怪的表面,所以除了支持过时的浏览器之外,这项努力可能会带来更多好处

我能感觉到你的痛苦 :D Edge 让我们有些头疼——就我个人而言,我觉得它比旧的 IE 版本更不稳定;/。 一个提示——F12 开发工具改变了浏览器的行为,所以我们试着记住在关闭控制台的情况下调试东西(原文如此!)

总之🤞

如果您发现一些有趣的 Edge 错误(和/或解决方法),请告诉我们 - 在 MS 的问题跟踪器上 👍 有时会有所帮助。

我已经向引擎存储库提交了一个 PR,它解决了我在 Edge(和 Firefox!)中看到的问题,但它需要一点反馈,因为我不确定如何处理围绕它的现有测试用例。

我发现的一个仅限 IE11 的问题是,当用户通过单击聚焦编辑主机时, selectionchange触发两次:一次将插入符放置在位置 0,再次将插入符放置在用户实际想要的位置因为它是通过点击。 同时,在程序化focus ,它将位置设置为 0(例如,在插入链接之后,插件将焦点返回给编辑器。)如果我能找到一种检测“点击焦点”与“点击焦点”的好机制程序化焦点'我应该能够在那里做一些事情。

我唯一看到的另一个是困难的,因为它需要我研究引擎本身的工作原理才能弄清楚。 它与MutationObserver和两步插入符绑定有关。 我看到无法在突出显示的链接末尾插入空格的情况,或者在输入其他文本时插入空格然后“中断”,或者在_updateDomSelection时抛出IndexSizeError _updateDomSelection尝试修改选择(由于某种原因,DOM 文本节点比模型的文本节点中的预期短。)

我会继续尝试将它们作为单独的东西散列出来,以便更容易地集成它们,但我会尝试在此之前将ckeditor5-build-ie11推高,以便其他人至少可以检查一下。

我已经看到并回复了你的 PR (https://github.com/ckeditor/ckeditor5-engine/pull/1442)。 我们仍然需要在那里做一些工作,但它很有希望:)

同时,在编程焦点时,它将位置设置为 0(例如,在插入链接后,插件将焦点返回给编辑器。)

我记得 IE 和普通浏览器在失去焦点的可编辑主机中处理选择的方式存在显着差异。 您需要更改此场景在各种浏览器中的行为:

  1. 在本机contentEditable元素中进行一些选择。
  2. 点击外面。
  3. 通过一些非侵入性的方式聚焦它(例如,提前设置setTimeout() ;不要使用控制台,因为它会影响聚焦和选择)。

其他浏览器会恢复之前的选择吗? 或者所有浏览器都会在0位置设置新选择(焦点)?

如果都做后者,我们就会到处都有错误(除非focus被异步触发)。 那是因为我们在editor.editing.view.render()这样做:

    focus() {
        if ( !this.document.isFocused ) {
            const editable = this.document.selection.editableElement;

            if ( editable ) {
                this.domConverter.focus( editable );
                this.render();
            } else {
                /**
                 * Before focusing view document, selection should be placed inside one of the view's editables.
                 * Normally its selection will be converted from model document (which have default selection), but
                 * when using view document on its own, we need to manually place selection before focusing it.
                 *
                 * <strong i="20">@error</strong> view-focus-no-selection
                 */
                log.warn( 'view-focus-no-selection: There is no selection in any editable to focus.' );
            }
        }
    }

我们首先聚焦可编辑元素,然后同步渲染当前视图。 我现在不记得它是如何工作的 - render()恢复以前的选择,因为domConverter.focus()导致异步焦点所以当render()被调用时,我们仍然在模型中保留旧的选择/看法? 或者现代浏览器是否会自行恢复选择,因此触发的focus事件不会重置上次存储的选择?

无论如何,我现在可以说的是,IE 总是有问题,因为整个窗口中可能只有一个选择。 因此,一旦您将焦点从可编辑项中移开,选择就会在那里不可逆转地丢失。 过去,在 CKEditor 3 中,我们使用 iframe(所以我们有多个窗口)和模式(具有可聚焦的输入字段)放置在主窗口中,而可编辑放置在内部窗口中。 然后,当我们引入内联可编辑项(在 CKEditor 4 中)时,我们必须引入选择锁定和恢复以在将焦点移动到 UI 中的可聚焦元素时处理选择保留。 不过,我现在不知道这是否仍然仅适用于 IE 或所有浏览器。 在 CKEditor 5 中,我们还没有选择恢复系统,现在一切都很好。 那么,IE11 在这里有何不同?

我唯一看到的另一个是困难的,因为它需要我研究引擎本身的工作原理才能弄清楚。 它与 MutationObserver 和两步插入符绑定有关。 我看到无法在突出显示的链接末尾插入空格的情况,或者在输入其他文本时插入空格然后“中断”,或者当 _updateDomSelection 尝试修改选择时抛出 IndexSizeError (由于由于某种原因,DOM 文本节点比模型的文本节点中的预期短。)

我建议渐进增强 -禁用两步插入符号移动有帮助吗? 如果是这样,让我们​​在 IE11 中忘记它;) 如果不是,我们将需要讨论输入处理,这是我不想开始的事情 :D

我发现了 IE 中的IndexSizeError问题,用于在链接末尾插入空格。 IE 有一个特殊的行为,它设置包含在连接的编辑主机中的<a>href属性(通过属性或通过setAttribute ) - 它更新如果hreftextContent指向相同的 URI,则textContent匹配为href设置的值。 这对渲染系统造成了严重破坏。 幸运的是,我能够对 IE11 polyfills 文件进行功能测试和填充。

(function() {
    var host = document.createElement('div');
    host.contentEditable = true;
    host.style.display = 'none';
    var link = document.createElement('a');
    link.textContent = 'https://example.org';
    link.href = 'https://example.org';
    host.appendChild(link);
    document.documentElement.appendChild(host);
    link.href = 'https://example.org?';
    if (link.textContent === 'https://example.org?') {    
        var oldHrefDescriptor = Object.getOwnPropertyDescriptor(HTMLAnchorElement.prototype, 'href');
        Object.defineProperty(HTMLAnchorElement.prototype, 'href', {
            get: oldHrefDescriptor.get,
            set: function(value) {
                var hasElements = false;
                for (var i = 0; i < this.childNodes.length; i++) {
                    if (this.childNodes[i] instanceof Element) {
                        oldHrefDescriptor.set.call(this, value);
                        return;
                    }
                }                
                var oldText = this.textContent;
                oldHrefDescriptor.set.call(this, value);
                if (this.textContent !== oldText) {
                    this.textContent = oldText;
                }
            }
        });
        var oldSetAttribute = Element.prototype.setAttribute;
        Object.defineProperty(HTMLAnchorElement.prototype, 'setAttribute', {
            value: function(key, value) {
                if (key.toLowerCase().trim() === 'href') {
                    this.href = value;
                }
                else {
                    oldSetAttribute.call(this, key, value);
                }
            }
        });
    }
    document.documentElement.removeChild(host);
})();

其他浏览器会恢复之前的选择吗? 或者所有浏览器都会将新选择(焦点)设置在位置 0 上?

似乎没有浏览器能回忆起之前的选择; 问题确实是 IE 在focus之前触发selectionchange focus 。 Firefox 也会这样做,但仅在某些非常特殊的情况下(我已在此处为他们提交了错误报告:https://bugzilla.mozilla.org/show_bug.cgi?id=1470876)这似乎在很大程度上已通过解耦解决选择/重点。

我们需要讨论输入处理,这是我不想开始的事情:D

我已经开始了😛

首先,在_processDataFromDomText_checkShouldLeftTrimDomText_checkShouldRightTrimDomText在浏览器想要输出childList MutationRecord情况下被证明是有问题的\x20组成的单个Text节点。 我想知道这是否应该是一个特殊情况——比如如果节点是单个\x20空间,并且有一个prevNodenextNode ,返回\x20原样。

所以我在 Edge 中看到的问题是,当你在一堆空格中间输入一个空格时,它会触发无关事件——首先是一个带有characterData记录的突变观察者回调,此时selection 根本没有改变(与 FF、Chrome 和 IE 不同,其中选择已更改为新插入字符之后的位置),然后另一个带有两条记录(添加和删除节点)的突变观察者回调,此时选择已更改为空格序列中第一个空格之后的位置(到底是什么? ),然后最终触发input (完全向后,应该在突变记录之前)和selectionchange ,并且在这两个事件期间,选择已更改为在新插入的字符之后。 但是 CKEditor 引擎响应这些事件的方式,它迫使 Edge 将插入符号保留在插入点,这会导致后续空格处于“插入模式”。

在仔细记录了不同浏览器之间的事件和突变之后,看起来几乎不可能在没有...输入处理的情况下让它一切顺利 🎉

我看到的唯一真正可靠的输入事件是keydownkeyup一对,或者compositionstartcompositionend一对——浏览器处理keydownkeyup以及beforeinputinputselectionchange在组合过程中非常不同。

您能否确认 ckeditor 5 与 IE 11 兼容?

嘿伙计们,知道什么时候准备好吗?

我能够使用 babel 插件将编译后的 ckeditor.js (es6) 转换为 es5 以支持 IE11,但现在Symbol功能给了我对象错误,如包中定义的所有符号的TypeError: Unable to get property 'get' of undefined or null reference.
任何帮助解决它,因为我希望它立即将此编辑器尽快集成到我们的网站中

大家好,
你们有没有人获得了 ckeditor 的 ES5 版本,或者这是一场无止境的旅行?
我为我感到羞耻,但我真的需要让这些东西在 ie11 上运行。

正如我从您的所有消息中了解到的,这确实是一项棘手的任务。
我希望你们中有人能回答他走了多远。

就我个人而言,我想尝试将其重写为 TS 并将 ES5 编译放到 awesome-ts-loader 中,我认为它应该比与 babel、polyfills 等斗争更简单)

希望您的明智建议:)

让它进入 ES5 只是寻找一些/一些奇怪的问题。 然后是使用 CSS 进行构建。

但是,一旦您完成了这项工作,您仍然会将跨浏览器问题留给事件/选择模型。 恐怕要独自完成这项工作太费劲了。

必须同意 IE 的所有内容,但让客户使用 IE11 是一个交易破坏者。 恢复到 v4。

至少对于创建内容的用户来说,这可能是放弃 IE11 的理由。 只要编辑器生成的代码在 IE11 中仍然有效,就可以在使用 CK 编辑器的应用程序之间实现优雅的过渡。 不同类别的用户被告知他们对 IE 的限制。

鉴于这种支持已经持续了 2 年,支持的状态如何?

带来与 IE11 的任何级别的兼容性都是一个问题,不仅因为它最初需要时间,而且后来维护。 IE11 尽管比 IE9 有了巨大的改进,但仍然与 Edge 显着不同(反过来,Edge 又与其他浏览器大不相同)。 缺乏 ES5 支持是这里最微不足道的问题。 缺乏某些现代 API 也不是最难的部分。 需要花费最多时间并且经常需要对浏览器进行逆向工程的是了解 IE11 的那些“小”怪癖,这会使您的应用程序崩溃或看起来完全有问题。

我们可以花几个月的时间来尝试支持这个浏览器……或者带来许多有趣的功能,例如自动补全占位符RTL 支持,进一步增强表格,解决一些内容兼容性问题以支持使用其他编辑器创建的内容允许更多的自由(这实际上是一个大问题),改进文档和编写教程。 许多事情可以在修复 IE11 所需的时间内完成。 看到它的市场份额在下降,并且一些公司比微软更早地放弃了对该浏览器的支持,这真的是一个艰难的选择。

我并不是要写出我们不会对此进行处理,只是想澄清为什么到目前为止还没有发生太多事情。 例如,我们最近一直致力于AngularReactVue集成、 Office 支持中的 Paste (在下一个版本中推出)。 如果我们专注于 IE11,所有这些都不会出现。

可能有助于加快速度的可能是,如果我们有愿意参与赞助此功能的公司联系我们,或者至少有兴趣获得 CKEditor 的商业许可,如果 IE11 将被修复,在这种情况下,我们可能会尝试扩展和更快地指定人员参与其中。

顺便说一句,我重新检查了 IE11 将支持多长时间。

https://www.microsoft.com/en-us/windowsforbusiness/end-of-ie-support

从 2016 年 1 月 12 日开始,只有适用于受支持操作系统的最新版本的 Internet Explorer 才能获得技术支持和安全更新。 Internet Explorer 11 是 Internet Explorer 的最后一个版本,将继续接收 Windows 7、Windows 8.1 和 Windows 10 上的安全更新、兼容性修复和技术支持。

根据
https://support.microsoft.com/en-us/help/13853/windows-lifecycle-fact-sheet

从现在开始,对 Windows 10 的支持结束似乎是一百万年(2028 年并且还在增加):

screen shot 2018-11-09 at 17 57 08

关于该主题的随机 URL:

可悲的是,这就是为什么要求 ie11 支持。

就个人而言,如果有明确的声明说“不,不会有 ie11 版本”而不是悬而未决,我很高兴

就个人而言,如果有明确的声明说“不,不会有 ie11 版本”而不是悬而未决,我很高兴

我们过去与许多公司成功合作,导致提供了许多原本可能无法开发的功能,所以我不能说——“它不会完成”。 这是一个开放的话题。 但我明白,一个明确的答案会让你更容易做出决定:) 我很抱歉不能给出答案。

对于企业用户,我可以看到他们多年来一直坚持使用 IE11 over Edge,因为在 IE 上运行的旧 Web 应用程序可能无法在 Edge 上运行。 一些用户可能有 Windows 10,但他们的浏览器将是 IE11。

基本上 IE6 又回来了。

Internet Explorer 从来都不是常青树。

@reinmar足够公平
也许多一点宣传就能做到这一点

如果我们的业务方向需要在 IE 中继续使用,我们将不得不考虑从 Liferay DXP 实例中删除 CK 编辑器/合金编辑器并转向 TinyMCE。 我们必须转向其他非 CK 编辑器的解决方案。

如果有人拥有时光机……即使 IE7 团队有良好的意图,我们也可以让您知道,说服他们不要这样做。 https://en.wikipedia.org/wiki/Internet_Explorer_7。

将是《神秘博士》的精彩剧集,标题为“谁打破了互联网?”

ie7-alternative-1985

骗我一次为你丢脸,骗我七次丢人。 边缘的常青程度https://www.construct.net/en/blogs/construct-official-blog-1/just-how-evergreen-is-microsoft-edge-854

如果我们的业务方向需要在 IE 中继续使用,我们将不得不考虑从 Liferay DXP 实例中删除 CK 编辑器/合金编辑器并转向 TinyMCE。 我们必须转向其他非 CK 编辑器的解决方案。

@duracell80从技术上讲,TinyMCE(甚至是他们最新的“v5”)具有与 CKEditor 4 相似的架构。因此,就个人而言,我认为进行切换没有任何合理的好处。 请记住,CKEditor 4 将继续维护数年(直到 2023 年)——我们有很多用户和客户在使用它,所以我们不会就这样放弃它。 只要 IE11 对您来说是一个优先事项(甚至... IE8),您就可以继续使用 CKEditor 4 / Alloy Editor 并密切关注 IE11 的状态。

@Reinmar :我们正在 Angular 6 中开发我们的网站。那么有什么方法可以将 CKEditor4 集成到应用程序中。 因为我们也需要 IE 支持。

你好@prachh

目前,我们正在为 CKEditor4 开发 Angular 集成。 您可以订阅https://github.com/ckeditor/ckeditor-dev/issues/2481以获取有关其状态的更新。 我们计划保留对 CKEditor4 浏览器的支持,因此它将仅受支持IE9-11 的

请注意,Angular 集成将位于单独的存储库中。 不用担心,我们会在提到的 GH 票证参考中添加有关位置的信息。 如果您想获得有关即将进行的集成的更多信息,请随时在https://github.com/ckeditor/ckeditor-dev/issues/2481票证中提问 - 我们的讨论可能对 CKEditor4 社区有价值。

更新:

很高兴回来提供官方 CKEditor4 Angular 集成已经出来的信息! :tada: 你可以在https://www.npmjs.com/package/ckeditor4-angular找到它

cc @prachh和所有感兴趣的人

你好@prachh

目前,我们正在为 CKEditor4 开发 Angular 集成。 您可以订阅ckeditor/ckeditor-dev#2481以获取有关其状态的更新。 我们计划保留对 CKEditor4 浏览器的支持,因此它将仅受支持IE9-11 的

请注意,Angular 集成将位于单独的存储库中。 不用担心,我们会在提到的 GH 票证参考中添加有关位置的信息。 如果您想获得有关即将进行的集成的更多信息,请随时在ckeditor/ckeditor-dev#2481票证中提问 - 我们的讨论可能对 CKEditor4 社区有价值。

谢谢@jacekbogdanski

我现在正在处理 ckeditor 兼容性问题。 在为 ES5 构建编辑器后,我得到了@Suraj151 提到的观点。

我能够使用 babel 插件将编译后的 ckeditor.js (es6) 转换为 es5 以支持 IE11,但现在Symbol功能给了我对象错误,如包中定义的所有符号的TypeError: Unable to get property 'get' of undefined or null reference.
任何帮助解决它,因为我希望它立即将此编辑器尽快集成到我们的网站中

似乎我坚持了一段时间,所以我会很感激任何建议。

不久前我遇到了同样的问题,然后就放弃了。

任何阅读本文的人:请不要犯与我相同的错误:转译为 ES5 不会神奇地为您提供 IE11 支持。 CKEditor5 依赖于 IE 中不同或不可用的浏览器 API。

有关此问题的任何更新?

我们只是在研究 IE11 兼容性。 下周我们将发布它的结果。

大家好,

我们结束了关于在 IE 11 上运行 CKEditor 5 的研究。总的来说,可以为 IE 11 提供 CKE5 构建,在使用一些 polyfills 和快速修复后,它加载和基本功能工作(如打字)。 协作功能似乎也在起作用。 不幸的是,如果没有进一步的工作,编辑器不够稳定,无法用于生产。 一些不起作用的重要事情:

  1. 剪贴板使用不同的 API,需要一种特殊的解决方法来支持粘贴 HTML(所谓的“pastebin”)。 截至目前,编辑器在使用剪贴板时崩溃。
  2. 选择存在一些问题(本主题中讨论了一些问题)。
  3. 有一些较小的故障、错误或崩溃,例如,气球工具栏根本没有定位。
  4. 性能是个问题。 它并非处于无法使用的领域,但在打字的流畅程度方面存在明显差异(与其他浏览器相比)。
  5. 小部件(主要是表格)需要一些修复/改进。

而这些只是一些需要做的事情。

该研究很有希望,因为它证明了对 IE11 的支持是可行的。 但是,要接近“生产就绪”需要付出巨大的努力,而且我们目前无法自己为其提供资金。 因此,我们还没有关于任何 ETA 的任何计划,因为我们仍在寻找愿意分担该项目成本的公司。

如果您想在 IE 11 中使用 CKE5,这里是有关如何为 IE 11 创建构建的说明。只有经典编辑器经过测试并可用,尽管您可能可以准备其他编辑器查看ckeditor5-build-classic所做的更改

  1. 克隆ckeditor5存储库。 结帐到ie11分行。
  2. 运行mgit sync 。 这个在 Windows 上可能会失败,运行它直到它通过而没有错误。
  3. 运行yarn install
  4. 转到packages/ckeditor5-build-classic
  5. 运行yarn build
  6. ckeditor.js文件将在ckeditor5-build-classic/build

请记住, mgit命令指的是名为 mgit2 的项目。 看到这个评论

如果您对确切更改的内容感兴趣,请检查哪些存储库切换到ie11分支并使用您喜欢的任何工具查看提交中引入的更改。 要检查哪些分支切换到ie11 mgit st ,请在ckeditor5存储库主目录中运行mgit st

如果您想选择它并帮助解决 IE 11 上的问题,我们非常欢迎您这样做!

(感谢您在这方面的工作......遗憾的是 IE11 是“必须拥有”,_所以我被告知_......)

老实说,我正在努力解决这个问题:到目前为止......
$ yarn run mgit 同步

  • 但一直失败:

“主机密钥验证失败”
“致命:无法从远程存储库读取”

——
我尝试了一些不同的克隆(使用我的 github 用户名 - 认为这可能是凭证失败)
即使正在创建 /package/ 目录,(通过克隆 node_modules)但目录是空的。

--- 背景 - 如果它对任何人有帮助:
这里的票证没有提到mgit sync必须与https://www.npmjs.com/package/mgit 相关- 所以在全球范围内安装。
然后: $ npm run bootstrap
(这运行: mgit sync && yarn install )
但这就是我得到的,因为: $ yarn run mgit sync 只返回“主机密钥验证失败”

哎呀!

mgit是我们自己的项目,实际上名为 mgit2 (尽管命令是mgit )。 很抱歉错过了那个。 它应该在您运行yarn install后安装,因为它在package.json列出。 但是,如果您安装了mgit ,我不确定它是否会发生冲突。 您还可以尝试使用 npm 或 yarn

顺便提一句。 你为什么要运行yarn run mgit sync

那么,我们可以获得 IE11 支持的状态吗? 它在哪里? 你们有没有把它带到一个稳定的、值得生产的状态?

@Yahav到目前为止,还没有公司有兴趣赞助有关 IE11 兼容性的工作——这阻碍了我们推进这个问题,因为 IE11 支持需要大量工作。 所以现在,我们在结束@scofalik评论中提到的研究后放弃了。

你好,
在 ie11 上,我收到错误消息:SCRIPT1003:预期的 ':' 当将 @ckeditor/ckeditor5-vue 包含到我的 vue-cli 应用程序时,它崩溃了。

你好@wwalc ,会支持 IE11 吗?。
在接下来的 5 年里我们只使用 CKeditor 4 安全吗?
或者我们是否需要升级?

@Rialzista IE11 没有任何进展(通过不花时间在它上面,我们能够继续添加更多新功能:https://ckeditor.com/blog/CKEditor-5-v15.0.0-with-水平线分页响应式工具栏和 SVG 上传支持/)

至于 CKEditor 4:官方对 CKEditor 4 的支持到 2023 年。这是我们已经承诺的事情,而且我们肯定不会在此之前结束支持。 这让您安心 4 年。 接近那个日期,我们将看看情况如何,并决定接下来使用 CKEditor 4 做什么。

你好,

有了这篇文章的构建,我们是否得到了类似于 CDN 的构建? 使用由 yarn 构建的文件时出现此错误:

Uncaught CKEditorError: ckeditor-duplicated-modules: Some CKEditor 5 modules are duplicated. Read more:

编辑:Neverming,降级到 ckeditor 4

我认为这不会发生,因为 Internet Explorer 11 不支持 ES6。

此页面是否有帮助?
0 / 5 - 0 等级