Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   ckeditor, исполняемый жс (https://javascript.ru/forum/misc/57924-ckeditor-ispolnyaemyjj-zhs.html)

ild 26.08.2015 14:51

ckeditor, исполняемый жс
 
Есть один движок, в качестве редактора используется ckeditor 4 не понятной подверсии (переписали, и удалили информацию о версии). Поставил для него плагин codesnippet, он свою очередь потребовал плагины widget и lineutils. Их поставил, там дальше ругается:
Код:

Uncaught TypeError: CKEDITOR.style.addCustomHandler is not a function
Uncaught TypeError: CKEDITOR.tools.objectKeys is not a function

Вообщем забил. Решил более старый плагин поставить pbckcode, работает как бы. После сохранения в редакторе на странице код выводится просто внутри тега <pre></pre>.

Дальше хочу сам доделать, как сделать, допустим в этот пре добавлю уникальный id и создаю кнопку <input type="button" class="run-button" value="Запустить!">

function runjs() {
      var jsss = this.innerUTML();   
}


Вопрос такой, как заставить исполнится содержимое jsss интерпретатором, как в этом форуме?

tsigel 26.08.2015 15:01

<script>
  var start = function () {
  var iframe = document.createElement('iframe');
  document.body.appendChild(iframe);
  iframe.contentDocument.write('<scr' + 'ipt>alert("start!")</scr' + 'ipt>');
};
</script>
<button onclick='start();'>start</button>

ild 26.08.2015 15:29

хитро. Спасибо. Через время только доперло, сначала прочитал scr как src, думал что за ipt :)

tsigel 26.08.2015 15:32

ild,
Есть и другие варианты. Например eval, но через iframe наиболее безопасно и можно запускать примеры с версткой.
Вроде. Вообще подобным не занимался, может кто предложит более безопасный способ. Запускать чужие скрипты на своем домене - всегда риск.

ild 26.08.2015 15:43

так то пока попадает в базу, проходить санетизацию. Хотя хз

ild 30.08.2015 20:09

А есть другие идеи без ифрейма? Ведь, допустим в коде будет вывод только console.log(), там же ифрейм не нужен фактически

ild 30.08.2015 21:16

вот думаю, если внутри <pre> обворачивать невидимым

function runjsID(){
    <pre>
         исполняемый код
    </pre>
}


тогда функцию можно заставить вызвать, только опять, все это должно быть внутри <script> что тоже не вариант, исходный код будет не видно

tsigel 31.08.2015 10:19

ild,
Ну например так можно:
eval('alert(2)');


Часовой пояс GMT +3, время: 14:08.