TinyMCE 粘贴HTML代码,避免style属性被自动清除_html/css_WEB-ITnose

php中文网
发布: 2016-06-24 11:43:45
原创
3099人浏览过

tinymce在粘贴含有style属性的html代码时,会自动清除style属性,设置 extended_valid_elements 也只能在firefox浏览器起作用,chrome无效。

extended_valid_elements: 'div[style|class|id]'

Chrome下即使设置了 inline_styles: true, schema: 'html5', 也没有用

无奈去看TinyMCE源码,发现如果去掉 plugins 里的 paste 就不会被剔除样式,最终在 plugin/paste/plugin.js 里找到这样一段代码:

function addPreProcessFilter(filterFunc) {            editor.on('BeforePastePreProcess', function(e) {                e.content = filterFunc(e.content);            });        }
登录后复制

估计是在这里过滤的,找到 filterFunc这个函数:

立即学习前端免费学习笔记(深入)”;

// Sniff browsers and apply fixes since we can't feature detect        if (Env.webkit) {            addPreProcessFilter(removeWebKitStyles);        }        if (Env.ie) {            addPreProcessFilter(removeExplorerBrElementsAfterBlocks);        }
登录后复制

看到这里我震惊了,TinyMCE真的这么狗屎吗?就直接检测了webkit和ie,Firefox被无视了吗?Firefox下的style被保留是因为TinyMCE的开发人员根本没有考虑Firefox浏览器,我还以为是Chrome下出了什么bug,真够狗屎的。

代码小浣熊
代码小浣熊

代码小浣熊是基于商汤大语言模型的软件智能研发助手,覆盖软件需求分析、架构设计、代码编写、软件测试等环节

代码小浣熊 51
查看详情 代码小浣熊

在进去这个 removeWebKitStyles函数里:

// Filter away styles that isn't matching the target node            var webKitStyles = editor.settings.paste_webkit_styles;            if (editor.settings.paste_remove_styles_if_webkit === false || webKitStyles == "all") {                return content;            }
登录后复制

很明显,只要设置一下这个属性就可以

paste_webkit_styles: true

看了TinyMCE的源代码,写的真叫一个烂,全局变量没有加任何标识区分本地变量,函数和语句混合在一起。

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号