1

尝试在zombie.js 无头浏览器中测试 quill.js 编辑器(contenteditable div)。

  1. 抱怨缺少 document.getSelection
  2. 抱怨缺少 document.createTreeWalker
  3. 如果我使用编辑器的 DOM 节点手动分派更改事件,似乎没有响应。

任何人都知道如何使这项工作?

4

1 回答 1

3

好的,这就是我发现的:

  1. Zombie.js 使用的当前(旧)版本的 jsdom 不支持 document.getSelection。我现在不得不对其进行修补。有一个针对zombie.js 的待处理 PR,应该将 jsdom 更新到可用的更高版本:https ://github.com/assaf/zombie/issues/939
  2. document.createTreeWalker - 相同
  3. 事实证明 quill.js 正在侦听“keyup”或“keydown”而不是“change”,因此需要调度它们。

下面是缺少的 DOM 方法的一些可怕的猴子补丁,这些补丁足以测试最低限度的 quill.js:

var zombie = require( "zombie" );
zombie.Pipeline.addHandler(function(browser, request, response) {

    browser.document.getSelection = browser.window.getSelection = function() {

        console.warn( "getSelection called - monkey-patched, incorrect implementation" );
        return null;

    };
    browser.document.createTreeWalker = function( x ) {

        console.warn( "createTreeWalker called - monkey-patched, incorrect implementation" );
        return {

            currentNode: x,
            nextNode: function() {

                if( this.currentNode.childNodes && this.currentNode.childNodes.length ) {

                    this.currentNode = this.currentNode.childNodes[ 0 ];

                } else if( this.currentNode.nextSibling ) {

                    this.currentNode = this.currentNode.nextSibling;

                } else if( this.currentNode.parentNode ) {

                    this.currentNode = this.currentNode.parentNode.nextSibling;

                }
                return this.currentNode || null;

            }

        };

    };
    return response;

} );
于 2016-02-02T23:28:24.057 回答