首页 > 解决方案 > 使用 insertHTML (contenteditable) 为 execCommand 撤消/重做 iframe

问题描述

所以,目前我正在开发一个小按钮,要求用户输入视频链接,然后我将该链接放入 iframe 并将其插入到 contenteditable 中document.execCommand("insertHTML", false, "<iframe width='350' height='551' src='<video_link_entered_by_user>'></iframe>")。这很好用,视频被嵌入到contenteditable.

唯一的问题是,如果我执行Command+Z或按undoin Safari,则iframe由于某种原因无法撤消。它适用于FirefoxChromeEdgeOpera,但出于某种原因,我认为safari不明白如何使用undo它。

除了实现我自己的撤消/重做堆栈之外,还有其他解决方法吗?我只是希望能够在用户选择undosafari 时摆脱 iframe,并在用户选择时将其添加回来redo。请提前帮助和感谢。

编辑:

这是一个 JS fiddle 来演示我在说什么。如果您在除 Safari 之外的任何浏览器中运行它并按撤消,它就可以工作。但不是在 Safari 中。 http://jsfiddle.net/qg41pd3k/9/

标签: javascripthtmliframesafaricontenteditable

解决方案


我认为 Safari 并不真正支持它。检查https://developer.mozilla.org/en-US/docs/Web/API/Document/execCommand,无论该命令是否支持/启用, execCommand 方法都会返回 true/false。在 Safari 中,它总是返回 false(根据我的测试)。

我认为唯一的解决方法是实现您自己的撤消/重做堆栈。


推荐阅读