无法将javascript添加到富文本编辑器

时间:2015-01-14 22:10:17

标签: tinymce umbraco umbraco7

我正在尝试在我的Umbraco设置中允许使用富文本编辑器输入中的javascript。我正在使用Umbraco 7.2。我在tinyMceConfig.config中启用了脚本标记,因此编辑器不再使用我的脚本标记。现在的问题是我的内容被切断了。

例如,在我的RTE中,我把:

<p>before</p>
<script>
alert('blam');
</script>
<p>after</p>

这个由TinyMCE转换为:

<p>before</p>
<script>// <![CDATA[
alert('blam');
// ]]></script>
<p>after</p>

问题是Umbraco.Field(“myRte”)的价值最终是:

<p>before</p>
<script>// <![CDATA[
alert('blam');
// ]]

似乎与CDATA有关。还有其他人在Umbraco 7中使用RTE工作吗?

2 个答案:

答案 0 :(得分:2)

可能的解决方法是创建一个允许您将脚本插入RTE的宏。宏将有一个Textarea参数,您可以在其中粘贴脚本标记,然后只需将参数值渲染为原始Html。但是,在尝试在页面上呈现输入之前,检查输入是否有效可能是个好主意。

如果您使用剃刀宏,则部分视图可能如下所示:

@inherits Umbraco.Web.Macros.PartialViewMacroPage
@{
    var script = Model.MacroParameters["script"].ToString();
}

@if (!script.IsNullOrWhiteSpace())
{
    @Html.ValidateHtml(script)
}

其中ValidateHtml是Mvc HtmlHelper的扩展方法:

    public static IHtmlString ValidateHtml(this HtmlHelper helper, string input)
    {
        if (!string.IsNullOrEmpty(input))
        {
            var htmlDoc = new HtmlDocument();
            htmlDoc.LoadHtml(input);
            if (htmlDoc.ParseErrors.Count() == 0)
            {
                return new MvcHtmlString(input);
            }
        }

        return null;
    }

帮助方法使用Html Agility Pack,我从张贴到another SO question的答案中获取了代码。

我已经在Umbraco 7.2.1安装上测试了它,即使您选择“在富文本编辑器和网格中渲染”选项,它也能正常工作。

答案 1 :(得分:1)

我的解决方案不是在编辑器中编写直接脚本,在包含

之后将其写入test.js文件中
import sys
from fractions import Fraction


import os

#myfile = open('7fractions.txt', 'w')

max = 7 #>2 #THIS VARIABLE DECIDES HOW MANY FRACTIONS ARE ALLOWED
A = [0] * max
A[0] = 1

def printList(A):
	return str(A).strip('[]')

def sumList(A):
	sum = 0
	for i in A:
		if i != 0:
			sum += Fraction(1, i)
	return sum

def sumTest(A):
	sum = 0
	v = 0
	for i in range(0, len(A)):
		if A[i] == 0 and v == 0:
			v = Fraction(1,A[i-1])
		if v != 0:
			sum += v
		else: 
			sum += Fraction(1, A[i])
	return sum

def solve(n, A):
	if n == max - 2:
		while (sumTest(A) > 1):
			print(A)
			if sumList(A) < 1:
				e = 1 - sumList(A)
				if e.numerator == 1 and e.denominator>A[n-1]:
					A[n+1] = e.denominator
					#myfile.write(printList(A) + '\n')
					print(A)
					A[n+1] = 0
			A[n] += 1
	else:
		while (sumTest(A) > 1):
			if sumList(A) < 1:
				A[n+1] = A[n] + 1
				solve(n+1, A)
				A[n+1] = 0
			A[n] += 1

#execute
solve(0, A)

tiniMceConfig.config 文件(config文件夹)中 validElements 标记,添加此

<script src="https:/....test.js></script>

所以它看起来像这样

,script[type|src|language]

测试和工作Umbraco 4.7.x.我不是在测试umbraco 7