Полимерные проблемы с contenteditable, execCommand и insertunorderedlist

Я пишу очень простой редактор с расширенными возможностями WYSIWYG, используя атрибут Polymer 2.0 и contenteditable для div, но испытываю проблемы с document.execCommand и выполняю команду insertunorderedlist. Если вы выберете и выделите текст, в который хотите вставить неупорядоченный список, и нажмите кнопку, тогда он либо не работает правильно в Chrome (последняя версия), либо при использовании Safari (последняя версия High Sierra) просто зависает. Если вы попробуете это за пределами Polymer (простой старый HTML и javascript), он будет работать нормально. Есть идеи, как заставить это работать с Polymer 2.0? Вот мой код:

<link rel = "import" href = "../../bower_components/polymer/polymer-element.html">

<dom-module id = "polymerbasic-app">
  <template>
    <style>
      :host {
        display: block;
      }
    </style>
    <button on-click = "_insertunorderedlist" type = "button">Insert Unordered List</button>

    <div id = "textBox" contenteditable = "true">
      Bullet One
      <br> Bullet Two
      <br> Bullet Three
    </div>
  </template>

  <script>
    /**
     * @customElement
     * @polymer
     */
    class PolymerbasicApp extends Polymer.Element {
      static get is() { return 'polymerbasic-app'; }
      static get properties() {
        return {
          prop1: {
            type: String,
            value: 'polymerbasic-app'
          }
        };
      }

      _insertunorderedlist() {
        document.execCommand("insertunorderedlist", false, null); this.$.textBox.focus();
      }
    }

    window.customElements.define(PolymerbasicApp.is, PolymerbasicApp);
  </script>
</dom-module>

И index.html:

 <!doctype html>
    <html lang = "en">
      <head>
        <meta charset = "utf-8">
        <meta name = "viewport" content = "width=device-width, minimum-scale=1, initial-scale=1, user-scalable=yes">

        <title>polymerbasic</title>
        <meta name = "description" content = "polymerbasic description">


        <link rel = "manifest" href = "/manifest.json">

        <script src = "/bower_components/webcomponentsjs/webcomponents-loader.js"></script>

        <link rel = "import" href = "/src/polymerbasic-app/polymerbasic-app.html">
      </head>
      <body>
        <polymerbasic-app></polymerbasic-app>
      </body>
    </html>

Консоль отображает какие-либо ошибки? Я протестировал ваш код в Chrome (65.0.3325.162) и Safari (11.0.3) на Mac (High Sierra), и он отлично работает в обоих браузерах.

Manuel Lopez 22.03.2018 09:12

Это странно, как в Safari, той же версии, что и у вас, он зависает, когда я выбираю и выделяю текст Bullet One, Two и Three, а затем нажимаю кнопку. Вы выделяли и выделяли текст перед нажатием кнопки? Спасибо за помощь.

Halloween Man 22.03.2018 20:49

Да, сделал, и все заработало, как ожидалось. Я даже протестировал ваш код в Chrome (63.0.3239.108) в Linux, и он тоже сработал.

Manuel Lopez 22.03.2018 22:29

Спасибо. Я попробовал еще раз, но он все еще зависает при использовании Safari (11.0.3) на Mac (High Sierra). Я отредактировал и включил полный код, чтобы убедиться, что вы делаете то же самое. Я использую Polymer 2.6.0 и webcomponentsjs 1.1.1. Он зависает только тогда, когда вы выбираете / выделяете две или более строк текста, чтобы превратить их в неупорядоченный список.

Halloween Man 23.03.2018 10:39

Большое спасибо за предоставленный полный исходный код, версии Polymer и webcomponents.js, а также за то, что он зависает при использовании Safari. Я попробую еще раз позже.

Manuel Lopez 23.03.2018 15:01
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
216
0

Другие вопросы по теме