【发布时间】:2019-01-20 17:34:45
【问题描述】:
所以,目前我正在开发一个小按钮,要求用户输入视频链接,然后我将该链接放入 iframe 并使用 document.execCommand("insertHTML", false, "<iframe width='350' height='551' src='<video_link_entered_by_user>'></iframe>") 将其插入到 contenteditable 中。这很好用,视频被嵌入到contenteditable。
唯一的问题是,如果我执行Command+Z 或在Safari 中按undo,则iframe 将因某种原因无法撤消。它适用于Firefox、Chrome、Edge 和Opera,但出于某种原因,我认为safari 不明白如何undo 它。
除了实现我自己的撤消/重做堆栈之外,还有其他解决方法吗?当用户在 safari 中选择 undo 时,我只想能够摆脱 iframe,并在用户选择 redo 时将其添加回来。请提前帮助和感谢。
编辑:
这是一个 JS fiddle 来演示我在说什么。如果您在除 Safari 之外的任何浏览器中运行它并按撤消,它就可以工作。但不是在 Safari 中。 http://jsfiddle.net/qg41pd3k/9/
【问题讨论】:
-
对我来说,撤消只是重新打开最后一个关闭的选项卡。
-
execCommand 和 contentEditable 在浏览器之间是出了名的不一致,所以如果可能的话,我建议寻找其他解决方案。但是由于这个问题是关于解决方法的,也许您可以在 Safari 中粘贴一些占位符图像?然后稍后将其替换为 iframe?
-
似乎 Safari 无法撤消 iFrame 的粘贴,但是它们已被插入(尽管奇怪的是,您可以撤消/重做它们的 删除)。当您手动将 iFrame 复制/粘贴到
contenteditable字段中时,您也无法撤消该操作。
标签: javascript html iframe safari contenteditable