2015-01-14 24 views
9

Tôi đang cố gắng cho phép javascript trong đầu vào trình chỉnh sửa văn bản đa dạng thức trong thiết lập Umbraco của mình. Tôi đang sử dụng Umbraco 7.2. Tôi đã kích hoạt thẻ script trong tinyMceConfig.config để trình chỉnh sửa không còn ăn các thẻ script của tôi nữa. Vấn đề bây giờ là nội dung của tôi bị cắt.Không thể thêm javascript vào trình chỉnh sửa văn bản đa dạng

Ví dụ, trong RTE của tôi, tôi đặt:

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

này có được của biến đổi bởi TinyMCE để:

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

Vấn đề là giá trị của Umbraco.Field ("myRte") kết thúc là:

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

Có vẻ như liên quan đến CDATA. Có ai khác có javascript trong RTE làm việc trong Umbraco 7?

Trả lời

1

Cách giải quyết có thể là tạo macro để cho phép bạn chèn tập lệnh vào RTE. Macro sẽ có một tham số Textarea duy nhất mà bạn sẽ dán trong thẻ tập lệnh của mình và bạn chỉ cần hiển thị giá trị tham số dưới dạng Html thô. Tuy nhiên, có thể bạn nên kiểm tra xem đầu vào có phải là html hợp lệ hay không trước khi bạn cố gắng hiển thị nó trên trang.

Nếu bạn sử dụng một macro dao cạo quan điểm một phần có thể nhìn như thế này:

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

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

đâu ValidateHtml là một phương pháp mở rộng của 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; 
    } 

Phương pháp helper sử dụng Agility Html Gói và tôi nhận được mã từ câu trả lời được đăng lên another SO question.

Tôi đã thử nghiệm tính năng này trên bản cài đặt Umbraco 7.2.1 và nó hoạt động tốt ngay cả khi bạn chọn tùy chọn "Hiển thị trong trình chỉnh sửa văn bản có dạng thức và lưới".

+0

Tôi đang làm điều gì đó tương tự như điều này như một công việc xung quanh bây giờ. Tôi đã thêm một hộp văn bản thuần túy vào loại tài liệu cho "Tập lệnh trang". Điều này cho phép người dùng đặt các tập lệnh cụ thể của trang vào. – jdehlin

0

Giải pháp của tôi không được viết kịch bản trực tiếp trong trình soạn thảo, viết nó trong một file test.js sau đó bao gồm

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

Trong tiniMceConfig.config tập tin (config folder) validElements thẻ, thêm này

,script[type|src|language] 

vì vậy nó sẽ giống như thế này

<![CDATA[+a[id|style|rel 
..... 
,bdo,button,script[type|src|language]]]> 

Kiểm tra và làm việc trên Umbraco 4.7.x. Tôi không thử nghiệm trên umbraco 7

Các vấn đề liên quan