javascript - 使用 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
或按undo
in Safari
,则iframe
由于某种原因无法撤消。它适用于Firefox
、Chrome
、Edge
和Opera
,但出于某种原因,我认为safari
不明白如何使用undo
它。
除了实现我自己的撤消/重做堆栈之外,还有其他解决方法吗?我只是希望能够在用户选择undo
safari 时摆脱 iframe,并在用户选择时将其添加回来redo
。请提前帮助和感谢。
编辑:
这是一个 JS fiddle 来演示我在说什么。如果您在除 Safari 之外的任何浏览器中运行它并按撤消,它就可以工作。但不是在 Safari 中。 http://jsfiddle.net/qg41pd3k/9/
解决方案
我认为 Safari 并不真正支持它。检查https://developer.mozilla.org/en-US/docs/Web/API/Document/execCommand,无论该命令是否支持/启用, execCommand 方法都会返回 true/false。在 Safari 中,它总是返回 false(根据我的测试)。
我认为唯一的解决方法是实现您自己的撤消/重做堆栈。
推荐阅读
- angularjs - AngularJS JWT 本地认证疑惑
- java - Spring Boot OAuth2,使用 Tomcat 和 nginx 在验证后出现错误 ERR_TOO_MANY_REDIRECTS
- html - 悬停时显示文本
- java - SpringBoot POST端点返回`No HttpMessageConverter`
- c++ - 如何为 PoPieChartRep 设置注释颜色?
- wso2 - WSO2 Api Manager 3.2.0 PostgreSQL 问题
- flutter - Flutter:如何使用变量将参数传递给 Widget?
- c++ - cpp exe文件在wsl上工作但在windows10 cmd上不工作
- python - 重用 Django Rest Framework Generic 视图来获取它的 QuerySet
- c - 为什么C中的printf需要指定数据类型