Как декодировать HTML в конкретном элементе, прежде чем отображать всплывающее окно? - PullRequest
1 голос
/ 19 января 2012

У меня есть следующие две функции javascript, внутри кода smarty, с помощью которых я хочу отобразить всплывающее окно с динамическим содержимым, содержащим HTML-разметку:

1-я функция для открытия всплывающего окна:

<script type="text/javascript">  
// global variable for subwindow reference
var newWindow;
// generate and fill the new window
{literal}
function makeNewWindow( ) {
 // make sure it isn't already opened
 if (!newWindow || newWindow.closed) {
   newWindow = window.open("", "prd_window", "height=400, width=300, fullscreen, resizable");
  // delay writing until window exists in IE/Windows
  setTimeout("writeToWindow( )", 50);
 } else if (newWindow.focus) {
        // window is already open and focusable, so bring it to the front
  newWindow.focus( );
    }
}
{/literal}    

2-я функция для записи динамического контента во всплывающее окно, которое вызывается из 1-й функции:

function writeToWindow( ) {ldelim}
            // assemble content for new window    
            var newContent = "<html><head><title>title text here</title></head>";
            newContent += "<body>";
            var full_descr = "{$markup_info.fulldescr|strip|escape:'html'}";  
            newContent += "<div id=\"div_fulldescr\">" + full_descr + "</div>";
            newContent += "</body></html>";    
            // write HTML to new window document
            newWindow.document.write(newContent);
            newWindow.document.close( ); // close layout stream
       {rdelim}
</script>

Во 2-й функции я кодирую html-разметку, содержащуюся в переменной full_descr , с помощью модификатора smarty 'escape', поэтому код javascript не нарушается. $ markup_info - умный ассоциативный массив, а fulldescr - один из его индексов.

Приведенный выше код открывает окно с содержимым элемента div_fulldescr , отображаемым в виде html-разметки, как и ожидалось, то есть он не был декодирован. Мне было интересно, как я могу декодировать html-разметку элемента div_fulldescr div, прежде чем отобразить всплывающее окно.

1 Ответ

0 голосов
/ 19 января 2012

вы можете заменить {$markup_info.fulldescr|strip|escape:'html'} на {$markup_info.fulldescr|escape:'javascript'}.

...