2015-01-14 13 views
9

Sto tentando di consentire javascript negli input dell'editor rich text nella mia configurazione di Umbraco. Sto usando Umbraco 7.2. Ho abilitato il tag script in tinyMceConfig.config in modo che l'editor non mangi più i miei tag di script. Il problema ora è che il mio contenuto è interrotto.Impossibile aggiungere javascript all'editor rich text

Ad esempio, nel mio RTE ho messo:

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

Questa ottenere di trasformata da TinyMCE a:

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

Il problema è il valore di Umbraco.Field ("Myrte") finisce per essendo:

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

Sembra collegato a CDATA. Qualcun altro ha javascript in RTE che lavora in Umbraco 7?

risposta

1

Una possibile soluzione sarebbe quella di creare una macro che consenta di inserire uno script nell'RTE. La macro avrebbe un singolo parametro Textarea in cui incolleresti il ​​tuo tag script e dovresti semplicemente rendere il valore del parametro come Html non elaborato. Tuttavia, potrebbe essere una buona idea controllare che l'input sia html valido prima di provare a renderlo sulla pagina.

Se si utilizza una macro rasoio la vista parziale potrebbe apparire come segue:

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

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

Dove ValidateHtml è un metodo di estensione al 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; 
    } 

Il metodo di supporto utilizza l'Agility Html Pack e ho ricevuto il codice da una risposta inviata a another SO question.

Ho provato questo su un'installazione di Umbraco 7.2.1 e funziona bene anche se si seleziona l'opzione "Render in editor di testo e la griglia".

+0

Sto facendo qualcosa di simile a questo come un lavoro intorno ora. Ho aggiunto una casella di testo normale al tipo di documento per "Script pagina". Ciò consente agli utenti di inserire script di pagine specifiche. – jdehlin

0

La mia soluzione non è scrivere lo script direttamente nell'editor, scrivere in un file test.js dopo che includono

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

In tiniMceConfig.config di file (cartella config) validElements tag, aggiungere questo

,script[type|src|language] 

in modo che sarà simile a questa

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

Test e lavoro su Umbraco 4.7.x. Non sono un test su umbraco 7

Problemi correlati