Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.08.2011, 13:40
fiw fiw вне форума
Аспирант
Отправить личное сообщение для fiw Посмотреть профиль Найти все сообщения от fiw
 
Регистрация: 18.08.2011
Сообщений: 23

Вставка SMARTY функции в innerHTML
Ребята помогите грамотно решить следующую задачу.

Есть код:
{literal}
<script type="text/javascript">
document.getElementById('WallComments').innerHTML = '{/literal}{he_wall_display object="album_file" object_id="35156"}{literal}';
</script>
{/literal}


Тут я вставляю смарти функцию. Все собственно сделано правильно, но сама функция имеет следующее содержание, из за которого вставка корректно не происходит.
Функция производит вставку целого файла.

Содержимое вставляемого файла:

<style>
.media_container {ldelim}
    margin-left: 20px;
{rdelim}
.video_info {ldelim}
    margin-top: 6px;
    padding-top: 6px;
{rdelim}
</style>
<script type="text/javascript">
window.addEvent('domready', function(){ldelim}
    he_wall.action_ids = {$js_action_ids};
    he_wall.wall_object = '{$wall_object}';
    he_wall.wall_object_id = {$wall_object_id};
    he_wall.allow_post = {$allow_post};
    he_wall.actions_per_page = {$setting.setting_he_wall_actions_per_page},
    he_wall.disable_music_upload = {if !$setting.setting_he_wall_disable_music}false{else}true{/if};
    he_wall.construct( '{$wall_uid}' );
{rdelim});
</script>

{if $wall_object != 'userhome'}
<style type="text/css">
.wall_action .wall_link {ldelim}display: none;{rdelim}
</style>
{/if}
... // и так далее


В итоге готовая страничка в браузере имеет следующий вид:

<script type="text/javascript">
document.getElementById('WallComments').innerHTML = '<style> 
.media_container {
    margin-left: 20px;
}
.video_info {
    margin-top: 6px;
    padding-top: 6px;
}
</style>
<script type="text/javascript">
window.addEvent('domready', function(){
    he_wall.action_ids = ["44828","44656"];
    he_wall.wall_object = 'album_file';
    he_wall.wall_object_id = 35156;
    he_wall.allow_post = 1;
    he_wall.actions_per_page = 15,
    he_wall.disable_music_upload = true;
    he_wall.construct( 'wall_4e4e3c3079609' );
});
</script>
<style type="text/css">
.wall_action .wall_link {display: none;}
</style>
// и так далее


Вообщем что можно сделать чтобы не редактировать сам файл шаблона, который вставляет смарти функция.
Потому, там менять очень много чего придется...
При вставке {he_wall_display object="album_file" object_id="35156"}
В обычный HTML код все работает корректно.
Но как бы это вставлять через innerhtml?
Ответить с цитированием
  #2 (permalink)  
Старый 23.08.2011, 22:42
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от fiw
Вообщем что можно сделать чтобы не редактировать сам файл шаблона, который вставляет смарти функция.
Создать скрытую textarea, куда поместить всё это. А потом просто получать её содержимое.
Должно работать, если только в генерируемом коде нет закрывающего тега </textarea>.

<textarea id="aaa">
<script><script><script>
<html></body><head><link>
</textarea>

<script>alert(document.getElementById('aaa').value)</script>
Но это грязный хак, и я бы не советовал им пользоваться.

Ещё можно попробовать поместить генерируемый код в комментарий и найти комментарий в DOM дереве. Но о работоспособности этого метода я ничего не знаю.

Последний раз редактировалось B@rmaley.e><e, 23.08.2011 в 22:46.
Ответить с цитированием
  #3 (permalink)  
Старый 23.08.2011, 22:52
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

А можно использовать special chars для HTML и тогда даже закрытая textarea не помешает:
<textarea id="aaa"> 
&lt;script&gt;&lt;script&gt;&lt;script&gt; 
&lt;html&gt;&lt;/body&gt;&lt;head&gt;&lt;link&gt; 
</textarea>
<script>alert(document.getElementById('aaa').value)</script>
Ответить с цитированием
  #4 (permalink)  
Старый 23.08.2011, 22:58
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

devote, тогда уж обработать строку (эксейпить кавычки, переносы строк, слеши) и засунуть в таком виде в document.getElementById('WallComments').innerHTML = '…';
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вставка элемента в место вызова функции belkir Элементы интерфейса 21 05.08.2011 07:59
динамическое содержимое функции alfmaster Общие вопросы Javascript 2 28.05.2011 16:10
arguments вызвавшей функции mister_maxim Общие вопросы Javascript 4 12.10.2010 15:21
Вставка скрипта с помощью innerHTML hryachok Events/DOM/Window 11 06.04.2010 13:52
Подскажите, как работает простой код (замыкание функции)? Dotod Общие вопросы Javascript 5 02.12.2009 03:03