Jump to content
  • 0

JavaScript - Table и жесткие условия


Enigma0066
 Share

Question

Приветствую.

Возникла необходимость выполнить JavaScript после того как таблица уже созданна.

Важное условие - тело скрипта должно быть внутри таблицы (т.е. внутри тега Table или его дитей)

Никаких внешних файлов со скриптами. Никаких class и ID у таблицы.

Для Body, img, Frame, iFrame есть событие onload="" но для Table он не выполняется.

Решил это так:

<table>
<tbody>
<tr>
<td><img onload="alert('Скрипт выполнен')" height=0 src="data:image/gif;base64,R0lGODlhAQABAIAAMQAAAP///ywAAAAAAQABAAACAkwBADs="></td>
</tr>
</tbody>
</table>

Минусы этого решения в том, что "data:image/gif;base64" не работает на старых версиях IE, и в том, что приходиться искать родителя (Table) используя код вида "parentNode.parentNode.parentNode"

Так же элемент <image> становиться виден если перевести страницу в режим редактирования (Document.designMode = "Inherit" или "on") а значит может быть случайно удалён, что не приемлемо.

Можно извратиться и выполнить скрипт прям из стилей, пример:

<table style="expression(alert('Скрипт выполнен'))">
<tbody>
<tr>
<td></td>
</tr>
</tbody>
</table>

Минус в том, что "expression" работает только в IE.

Можно применить оба эти решения в одной таблице для кросбраузерности но это уже слишком загромождённый код.

Вобщем нужен мелкий кросбраузерный изврат для эмуляции onload="" в таблице или кросбраузерный expression.

Предвидя вопрос, "А зачем так сложно?" отвечаю:

Используется визуальный редактор html, поскольку выделив и скопировав в редакторе таблицу мы не копируем скрипты и стили за её пределами, то соответственно они должны быть в её теле.

Скрипты выполняются в режиме просмотра но не в режиме редактирования.

Edited by Enigma0066
Link to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 0
А расширить функции копирования в буфер, и приплюсовывать туда весь необходимый контент нельзя?

Это вариант но я его ставлю на уровне ванианта <img onload="alert('Скрипт выполнен')" height=0 src="data:image/gif;base64,R0lGODlhAQABAIAAMQAAAP///ywAAAAAAQABAAACAkwBADs="> т.е. можно но кросбраузерный onload или expression были бы намного лучше.

Был у меня еще такой вариант:

<table style="background:url(javascript:alert('Скрипт выполнен'))">
<tbody>
<tr>
<td></td>
</tr>
</tbody>
</table>

но увы, он работает только в IE.

Edited by Enigma0066
Link to comment
Share on other sites

  • 0

Совершенно нежданно родилось абсолютно очевидное решение :facepalmxd::D

<table>
<script type="text/javascript">alert('Скрипт выполнен')</script>
<tbody>
<tr>
<td></td>
</tr>
</tbody>
</table>

причем настолько очевидное, что мне даже стало стыдно, что я о нём сразу не подумал :blush:

Самое главное скрипт нужно поставить не между <td></td> т.е. в зоне редактирования пользователем а до неё, куда шаловливые руки пользователя не смогут кликнуть и установить каретку для редактирования, или другим способом перевести туда каретку и удалить скрипт.

Всем спасибо, вопрос решен, тему можно закрывать.

Edited by Enigma0066
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy