TinyMCE不能插入媒体播放器的解决方案

在使用TinyMCE插入媒体代码时,会把原始的HTML替换为img标签,并且把原始数据转换为json格式的数据,例如:

原始HTML片段:

<p><object width="320" height="240" data="http://www.sin.com/sss.swf" type="application/x-shockwave-flash">
<param name="src" value="http://www.sin.com/sss.swf" /></object></p>

TinyMCE格式化后的HTML片段:

<img width="320" height="240" class="mceItemMedia mceItemFlash" src="http://121.52.214.209:9000/Scripts/tinymce/
themes/advanced/img/trans.gif" data-mce-json="{'video':{},'params':{'src':'http://www.sin.com/sss.swf'},'name':null,'hsp
ace':null,'vspace':null,'align':null,'bgcolor':null}"/>

到官网以及stackoverflow查了半天,类似问题的解决方案貌似是配置TinyMCE的valid_elements属性,但我试过都不管用。

最终的解决办法是采取了一种曲线救国的方式,大致思路如下:

采用HtmlAgilityPack来解析获取到的编辑器内容。

提取其中匹配的视频元素

替换该元素,使用格式化后标准的HTML媒体元素,例如<object>

关键点:

1,XPATH表达式 //img[@class="mceItemMedia mceItemFlash"]

2,json字符串到.net对象的转换,不想单独定义,试了下json to dynamic类型,竟然是ok的,看来json.Net这个类库很强大。

贴上转换部分的代码,在有多个匹配元素的情况下,采用遍历HtmlAgilityPack.HtmlNode的方式一直没成功,不知道是我没用对,还是HtmlAgilityPack的问题,最终是采用了字符串替换的方式。

private string HandleMediaContent(string content)
        {
            var reStr = string.Empty;
            reStr = content;
           
            string template = "<object width="{0}" height="{1}" align="middle" data="{2}" type="application/x-shockwave-flash"><param name="src" value="{3}" /><param name="allowfullscreen" value="true" /><param name="quality" value="high" /><param name="allowscriptaccess" value="always" /></object>";
            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
            doc.LoadHtml(content);
            var vNodes = doc.DocumentNode.SelectNodes("//img[@class="mceItemMedia mceItemFlash"]");
            if (vNodes == null)
                return content;
            for (var i=0;i<vNodes.Count;i++)
            {
                //var parent = vNodes[i].ParentNode;
               
                var attr = vNodes[i].Attributes.FirstOrDefault(t => t.Name == "data-mce-json");
                var width = vNodes[i].Attributes.FirstOrDefault(t => t.Name == "width");
                var height = vNodes[i].Attributes.FirstOrDefault(t => t.Name == "height");
                var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(attr.Value);
               
                var newNodeDocument = new HtmlAgilityPack.HtmlDocument();
                newNodeDocument.LoadHtml(string.Format(template,width.Value,height.Value,obj.@params.src,obj.@params.src));

                //parent.InsertBefore(newNodeDocument.DocumentNode, vNodes[i]);
                //parent.RemoveChild(vNodes[i]);

                reStr = reStr.Replace(vNodes[i].OuterHtml, newNodeDocument.DocumentNode.OuterHtml);
               
            }
            //return doc.DocumentNode.OuterHtml;
            return reStr;
        }

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索string
, 元素
, var
, content
, json格式提取数据
, DeserializeObject
, HtmlAgilityPack
, tinyMCE
tinymce汉化
电脑媒体播放器不能用、媒体播放器、高清媒体播放器、媒体播放器下载、媒体播放器哪个好,以便于您获取更多的相关知识。

时间: 2024-08-29 00:45:24

TinyMCE不能插入媒体播放器的解决方案的相关文章

利用Visual C#开发一个媒体播放器

visual|媒体 摘要:了解如何在 Microsoft Visual C# .NET 中使用 DirectShow 控件,如何开发一个媒体播放器.按照本文介绍的操作步骤,您可以创建一个简单 Visual C# 应用程序,用来播放数字音频和视频. 简介 Microsoft Visual C# 是世界上最流行的编程语言,利用 Visual C# 的最新版本 Visual C# .NET,您能够快速.有效地开发基于 Windows 窗体的应用程序,还可以为嵌入了 Microsoft Windows

VC2005下制作媒体播放器

前几天突然间心血来潮,打算自己用VC做一个媒体播放器,于是到网上搜索了一下,发现有很多好心人贴出了很多例子(很是感谢),一些是VC6写的,一些是VC2003/2005写的,都是直接通过wmp.dll(WINDOW MEDIA PLAYER9带的ACTIVE控件,存放在C:\WINDOWS\system32目录下.本人对VC6有点排斥(哈哈,就是觉得其C++标准支持太差了,故一般做项目时不考虑,实在没办法的时候才采用),就直接开始在VC2005下按照提示编写了. 开始总是一样: 1.添加一个解决方

mfc-MFC媒体播放器,如何实现播放功能

问题描述 MFC媒体播放器,如何实现播放功能 m_MediaPlayer.SetUrl(""媒体文件路径""): m_MediaPlayer.GetControls().Play();为什么不能实现播放功能? 解决方案 查看一下函数返回值,然后就是媒体路径是否正确对应媒体类型,mediaplayer能否支持 解决方案二: MFC媒体播放器是通过调用系统的 Filter 来实现播放的.你确认:1)多媒体文件路径是否正确?2)系统的 Filter 是否支持此类型的多媒体

media-点击按钮后停止媒体播放器

问题描述 点击按钮后停止媒体播放器 我在程序中设置一个媒体播放器,有play和stop按钮,当我运行以下代码时,play按钮是没有问题的,但是当我点击stop按钮时,却得到一个强行关闭的消息.这是怎么回事呢?这是我所用使用的代码: package com.example.hellomedia;import java.io.IOException; import android.app.Activity; import android.media.MediaPlayer; import andro

谷歌开发媒体播放器 抵制微软MediaPlayer

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 1月25日消息,据国外媒体报道,谷歌Chrome OS项目工程主管马修·帕帕基普斯(Matthew Papakipos)近日表示,谷歌正在为Chrome OS操作系统和Chrome浏览器开发一款媒体播放器. 帕帕基普斯称,该款播放器在功能上与微软的Windows Media Player类似.对于用户而言,在脱机状态下播放媒体内容至关重要.例

html中如何插入音乐播放器,可自定义列表,使用的软件是dreamweaver,求大神帮忙

问题描述 html中如何插入音乐播放器,可自定义列表,使用的软件是dreamweaver,求大神帮忙 html中如何插入音乐播放器,可自定义列表,使用的软件是dreamweaver,求大神帮忙 解决方案 html5的话,可以用video标签,否则用flash或者windows mediaplayer,嵌入object标签. 解决方案二: 代码你可以使用浏览器的查看源代码功能自己去你喜欢的网站抓,也可以google. 解决方案三: 要用第三方插件,如jplayerhttp://jplayer.or

无...-在网页中插入15dewplayer播放器,无法播放上一首下一首

问题描述 在网页中插入15dewplayer播放器,无法播放上一首下一首 在网页中嵌入15dewplayer播放器的multi模式的时候,上一首下一首按钮显示灰色,无法使用,请问是否在嵌入的时候缺少设置了什么属性还是接口? 解决方案 试试看windows media player.

java编写媒体播放器

问题描述 求指教,有没有办法不用JMF来编写一个媒体播放器呢? 解决方案 解决方案二:你自己写一个框架代替JMF撒.不过有现成的你为什么不用呢?不要重复发明轮子!!!解决方案三:Runtime.getRuntime().exec("cmd/cD:\a.mp3")嘻嘻~解决方案四:用现成的比较快,省时,自己的写的话就麻烦了!解决方案五:fmjopensource~

mfc-MFC制作媒体播放器的问题

问题描述 MFC制作媒体播放器的问题 在打开文件的时候,程序中有这么一句: TCHAR szFilter[] = _T("Mp3 File(*.mp3)|*.mp3 |Wma File(*.wma)|*.wma |Video File(*.dat)|*.dat |Wave File(*.wav)|*.wav |AVI File(*.avi)|*.avi |Movie File(*.mov)|*.mov |Media File(*.mmm)|*.mmm |Mid File(*.mid;*,rmi)