【问题标题】:elrte doesn't work with Internet Explorer 11 (IE11)elrte 不适用于 Internet Explorer 11 (IE11)
【发布时间】:2013-12-19 06:34:53
【问题描述】:

elrte 不适用于 Internet Explorer 11 (IE11)

由 Hank Valery 18 天前添加

嗨,

Microsoft 正在部署带有 Windows 更新的 IE11,因此我尝试了它如何与 elrte 一起使用。不幸的是,存在严重的问题。

当您开始输入时,文本不会包含在光标位置上。它出现在编辑器的开头,但似乎在格式化主体之外。点击“编辑器”后,您会发现输入的文本不可用。

有没有办法让 IE 再次与 elrte 一起工作? IE8-IE10不存在这个问题。

谢谢

【问题讨论】:

    标签: internet-explorer-11 elrte


    【解决方案1】:

    很难确定;我根本不知道elRTC软件。

    不过,快速浏览一下 the source code 会发现它使用浏览器检测来切换某些功能在不同浏览器中的工作方式——特别是,代码中有许多对 $.browser.msie 的引用,这是jQuery 浏览器检测属性。

    这有两个问题:

    • 首先,jQuery 浏览器检测功能已被弃用:最新版本的 jQuery 甚至默认不包含 $.browser 属性。可以使用 jQuery 迁移库将其取回,但并不理想;它已被弃用是有原因的,因此从长远来看,依赖它并不是真正的好习惯。随着新浏览器版本的发布,elRTE 依赖于 jQuery 中已弃用的功能这一事实可能会导致您的代码出现其他问题,并且还会使您更难升级到更新的 jQuery 版本。

    • 其次,IE11 进行了许多更改,这些更改破坏了许多现有的浏览器检测脚本。我不确定$.browser.msie,但上面的段落意味着您可能使用的是在 IE11 存在之前发布的 jQuery 版本,这意味着它无法知道这些更改。

    我的建议是做到以下几点:

    1. 在 github 问题跟踪器上发布工单,以便 erLTE 向他们报告问题。还要检查可能已经报告的其他票证。 github 代码中也可能存在尚未正式发布的更新,这可能会解决该问题。

    2. 获取latest version of jQuery(撰写本文时为v1.10.2)和jQuery.migrate library。使用这些而不是您当前使用的任何版本。如果幸运的话,最新版本的 migrate 库可能已经更新以正确检测 IE11,如果您真的幸运的话,这可能无需任何进一步的工作就可以解决问题。我不能保证,但值得一试。

    3. 您可能要考虑的另一个选项是切换到替代工具。 CKEditor 和 TinyMCE 似乎是目前此类工具中最流行的工具,但还有相当多的其他编辑器可用。您可能想尝试一下。

    【讨论】:

    • 我可以确认,当您升级到最新版本的 jQuery 时,elrte 会中断,并且浏览器检测肯定是一个问题。无法读取未定义的属性“msie”
    • @Vincent - 你是否也使用了 jQuery Migrate 库?正如我在回答中所说,如果应用程序使用的是$.browser(确实如此),那么如果您想使用最新版本的 jQuery,您肯定需要添加 jQuery.migrate。
    • 不,我没有。实际上最终切换到正在积极维护的CKEditor,不像elrte。
    • @Vincent - 呵呵。是的,可能是更好的解决方案。 :)
    【解决方案2】:

    您可以在编辑器页面上使用以下 META-Tag 来要求 IE 像在 IE 10 中一样呈现页面:

    <meta http-equiv="X-UA-Compatible" content="IE=10" />
    

    【讨论】:

      【解决方案3】:

      当你按下回车键时,所有输入内容都消失的症状吗?

      这是急救,但我可以解决问题。

      我试过“elRTE 1.3”、“elFinder 2.1_n”。

      • 升级jquery & jquery UI 我升级了 jquery 1.11.2 jquery.ui 1.10.1。 当您使用最新版本的bootstrap3和elFinder时,它会更快乐。
      • 修改“elrte.full.js”

      line 1:
        //<-- add start($.browser replica?)
        $.browser = { 
          msie: /Trident/i.test(navigator.userAgent) && !window.opera,
          msie11: /Trident/i.test(navigator.userAgent) && !/msie/i.test(navigator.userAgent) && !window.opera
        };
        //add end($.browser replica?)-->
      line 1329?:
        .bind('keydown', function(e) {
      line 1335?:
        ......
          if (self.dom.selfOrParent(n, /^PRE$/)) {
            self.selection.insertNode(self.doc.createTextNode("\r\n"));
            return false;
          } else if ($.browser.safari && e.shiftKey) {
            self.selection.insertNode(self.doc.createElement('br'));
            return false;
          }
          //<--add start(for IE11)
          else if( $.browser.msie11){
            self.selection.insertNode(self.doc.createElement('br'));
            return true;
          }
          //add end(for IE11) -->
        }

      example.html

      ...
        <!-- jQuery 1.11.2 UI 1.10.1 -->
        <script type="text/javascript" src="../js/jquery-1.11.2.js"></script>
        <script src="../js/jquery-ui-1.10.1.custom.min.js" type="text/javascript" charset="utf-8"></script>
        <link rel="stylesheet" href="../css/ui-themes/smoothness/jquery-ui-1.10.1.custom.css" type="text/css" media="screen" title="no title" charset="utf-8">
      
        <!-- elRTE 1.3 -->
        <script src="../js/el/js/elrte.full.js" type="text/javascript" charset="utf-8"></script>
        <link rel="stylesheet" href="../js/el/css/elrte.min.css" type="text/css" media="screen" charset="utf-8">
      
        <!-- elFinder 2.1_n -->
        <link rel="stylesheet" type="text/css" href="../js/el/css/elfinder.min.css">
        <link rel="stylesheet" type="text/css" href="../js/el/css/theme.css">
        <script src="../js/el/js/elfinder.min.js"></script>
      
        <script type="text/javascript" charset="utf-8">
          $(function() {
            $('.wysiwyg').elrte({
              height   : 450,
              toolbar  : 'complete',
              cssfiles : ['css/elrte-inner.css'],
              fmOpen : function(callback) {
                $('<div/>').dialogelfinder({
                  url : './el/connector.php',
                  commandsOptions: {
                    getfile : {
                      oncomplete : 'close',
                      onlyURL : true
                    }
                  },
                  getFileCallback :callback
                });
              }
            });
          });
        </script>
        ...

      【讨论】:

      • Sorry.. elRTE 通常还没有通过这种方式移动。有必要改进更多的“elrte.full.js”。
      猜你喜欢
      • 2013-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-18
      • 1970-01-01
      • 2015-07-22
      • 1970-01-01
      • 2020-09-27
      相关资源
      最近更新 更多