2012-05-21 3 views
0

У меня есть переменная, в которой сохраняется полный html. $ body = $ myhtmlpage;Передача HTML в функцию javascript

<a onclick="openWin(' <?php echo htmlspecialchars(json_encode($body)) ?>');" href="javascript:void(0);"> Click </a> 

и у меня есть эта функция javascript, отображающая текст в новом окне.

<script type="text/javascript"> 
function openWin(str) 
{ 
myWindow=window.open('','','width=400,height=400'); 
myWindow.document.write(str+"<p>This is 'myWindow'</p>"); 
myWindow.focus(); 
} 
</script> 

Когда в моем теле есть простой текст, он отлично работает. но если есть какой-то html, то он не отображается, я новичок в javascript. скажите, пожалуйста, как я могу подготовить свой HTML, чтобы он был передан в Javascript html. я попытался htmlspecialchars(json_encode($body)) функции, но все еще возникают проблемы.

Uncaught SyntaxError: Unexpected identifier 

ответ

1

Во-первых, вам не нужно использовать json_encode(), что это просто запутать ситуацию.

Во-вторых, проблема заключается в том, что ваш HTML содержит кавычки. Это приведет к синтаксической ошибке в выводимом HTML, поскольку htmlspecialchars() не избегает кавычек.

Используйте вместо этого htmlentities() с флагом ENT_QUOTES. Таким образом, измените строку следующим образом:

<a onclick="openWin('<?php echo htmlentities($body, ENT_QUOTES) ?>');" href="javascript:void(0);">Click</a> 

В-третьих (хотя это, вероятно, следует, во-первых, так как это самый важный момент) ваш подход к этому все неправильно. Если вы открываете новое окно, вы должны загрузить его с сервера и сгенерировать HTML-код при открытии окна.

0

Это потому, что HTML не является JSON. Для этого просто используйте: htmlspecialchars($body)

2

У вас будет длинная битва, пытаясь заставить много HTML работать как строковая переменная в Javascript. Было бы намного лучше разместить эту разметку в скрытом блоке (например, DIV) в вашей разметке, а затем просто получить содержимое этой разметки и показать ее в своем окне.

Это дополнительное преимущество, позволяющее проверить вашу скрытую разметку. Очень сложно отлаживать много разметки html, вбитых в строковую переменную, но когда они включены в DOM как реальная разметка, это значительно упрощает вашу жизнь.

UPDATE: Добавление некоторые примеры кода:

<div id="my_hidden_content" style="display:none;"> 
<?php echo $body; ?> 
</div> 

<a onclick="openWin('my_hidden_content');" href="javascript:void(0);"> Click </a> 

Сейчас на JavaScript:

function openWin(contentId) 
{ 
    var contentContainer = document.getElementById(contentId); 
    var content = contentContainer.innerHTML; 
    myWindow=window.open('','','width=400,height=400'); 
    myWindow.document.write(content+"<p>This is 'myWindow'</p>"); 
    myWindow.focus(); 
} 
+0

+1 за лучший путь ... –

+0

отлично, любезно пожалуйста, вы можете оставить немного кода намек, спасибо – Asghar

+0

Обновлены добавить образец кода. – davidethell

1

Вы можете попробовать html-код внутри php-кода, вместо PHP-кода внутри html. , например.

<?php 
echo "<a onclick='openWin(\" ".htmlspecialchars(json_encode($body))." \")'>Click</a>"; 
?> 
Смежные вопросы