Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вопрос как запустить код программы из контейнера (https://javascript.ru/forum/misc/72191-vopros-kak-zapustit-kod-programmy-iz-kontejjnera.html)

clecar 14.01.2018 22:13

Вопрос как запустить код программы из контейнера
 
Вопрос как запустить код программы из контейнера. Я видел решения в интернете с помощью Джерри и php. Джерри не устраивает из за тормозов PHP нет средств для оплаты хостинга. Не может быть, что невозможно запустить просто средствами JS. Вот начал экспериментировать с целью сохранения текущего состояния в программах с canvas, сделал программу записывающею в файл PNG символы, можно воткнуть в одну картинку весь мой сайт, Но как после расшифровки запустить текст html, находящийся в div или write ?
Вот программа шифровки и расшифровки.
http://id190382234-0.myjino.ru/raznoe/textcanvas/ix.htm
Эксперимент поместил на своём техническом сайте. Что понятней было с чего это вдруг мне понадобилось посмотрите пост МОЯ РАСКРАСКА.

clecar 15.01.2018 11:35

var cont = и.сод.innerHTML;
place.insertAdjacentHTML("afterBegin",cont



При каких условиях и в каком браузере должно работать пробовал в
Comodo IceDragon он единственный у меня работает с canvas без сервера выдаёт ошибку place is not defined
);

Dilettante_Pro 15.01.2018 11:48

Скрипт приходится вставлять отдельно - insertAdjacentHTML не переваривает тег script
<div id = "place"></div>
<script>
var cont = "<center><p><h2>СОХРАНЕНИЕ ТЕКСТА В ФАЙЛЕ PNG.</h2></p></center><br><button onclick = 'test();'>Проверка работы скрипта</button>"; // это ваш сохраненный текст
place.insertAdjacentHTML("afterBegin",cont);
var jsScript = document.createElement("script");
jsScript.text = "function test(){ alert('Скрипт работает');}";
place.append(jsScript);
</script>

Dilettante_Pro 15.01.2018 11:52

clecar,
place - это id блока, куда вставляется сохраненный фрагмент
У меня в примере это
<div id = "place"></div>

Если не работает, вместо
place.insertAdjacentHTML
можно попробовать
document.querySelector("#place").insertAdjacentHTML

Dilettante_Pro 15.01.2018 11:58

clecar,
Цитата:

Сообщение от clecar
работает с canvas без сервера

А зачем canvas сервер? Это тег html, работает в браузере без всяких серверов.

clecar 15.01.2018 12:00

Да сработало скопировало текст в новый блок, но он как был мёртвым текстом так и остался запуска не произошло.

clecar 15.01.2018 12:16

Сразу не прочитал о скрипте, буду пробовать, при этом я должен изменить
первоначальное правило загрузки в PNG файл.

clecar 15.01.2018 12:49

Зачем canvas сервер? Я в своей программе использую data, в браузерах на базе Хром, без сервера она работать не будет, требуется другой способ загрузки рисунка.

Dilettante_Pro 15.01.2018 14:06

clecar,
Вообще-то вот так работает - ввод исходного текста, кнопки Запомнить и Посмотреть. Насчет исходного файла r1.png - проблема доступа отсюда
<div id = "place"></div>
<div id = "source" style = "display:none">    <center><p><h2>СОХРАНЕНИЕ ТЕКСТА В ФАЙЛЕ PNG.</h2></p></center>
    <img src='http://clecar.ru/fail/cmal.gif' alt='' style='position: absolute; left: 30px;
        top: 10px; width: 80px; cursor: pointer;' onclick='document.location="http://clecar.ru"' />
    <input type="text" id="b" style='position: absolute; background: #faf; top: 60px;
        left: 270px; width: 800px;'>
    <div id='сод' style='position: absolute; background: #fdd; padding: 10px; word-break: break-all;
        overflow-y: scroll; font-size: 18px; top: 110px; left: 270px; width: 800px; height: 500px;'>
    </div>
    <div style='position: absolute; text-align: center; font-size: 18px; background: #ccf;
        top: 110px; left: 10px; width: 250px; height: 500px;'>
        <img id='ш' src='http://id190382234-0.myjino.ru/raznoe/textcanvas/r1.png' />
        <canvas id='прячу' width="100" height="100">
        </canvas><br>
        <br>
        <div id='инф'>
            0</div>
        <br>
        <input type="button" value="очистиь" onclick="прячу.width=прячу.width; сод.innerHTML=''; b.value=''; b.focus();">
        <input type="button" value="запомнить" onclick="тор(); "><br>
        <br>
        <input type="button" value="посмотреть" onclick="дешифратор(); "><br>
        <br>
        <input type="button" value="обновить" onclick="location.reload(); "><br>
        После загрузки этой страницы нажмите <b>обновить</b> затем кнопку <b>посмотреть</b>
    </div>
<script>
    var номер = 0;
    var знак = [];
    var текст = document.querySelector("#прячу").getContext('2d');
    текст.drawImage((ш), 0, 0, 100, 100);
    var imgd = текст.getImageData(0, 0, 100, 100);
    pix = imgd.data;
    var буквы = [' ', 'ё', "й", "ц", "у", "к", "е", "н", "г", "ш", "щ", "з", "х", "ъ", "ф", "ы", "в", "а", "п", "р", "о", "л", "д", "ж", "э", "я", "ч", "с", "м", "и", "т", "ь", "б", "ю", '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '+', '=', ";", "'", '#', '№', '%', '&', '?', '*', '(', ')', '{', '}', '<', '>', '|', '/', ':', '_', ',', '.', '"', 'Ё', 'Й', 'Ц', 'У', 'К', 'Е', 'Н', 'Г', 'Ш', 'Щ', 'З', 'Х', 'Ъ', 'Ф', 'Ы', 'В', 'А', 'П', 'Р', 'О', 'Л', 'Д', 'Ж', 'Э', 'Я', 'Ч', 'С', '', 'М', 'И', 'Т', 'Ь', 'Б', 'Ю', 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Z', 'X', 'C', 'V', 'B', 'N', 'M', "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "a", "s", "d", "f", "g", "h", "j", "k", "l", "z", "x", "c", "v", "b", "n", "m"];
    var знач = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 70, 71, 72, 73, 74, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162];
    var k = 0;
    document.querySelector("#b").focus();
    function тор(e) {
        var t = document.querySelector("#b").value;
        document.querySelector("#инф").innerHTML = 'length = ' + t.length;
        var d = t.length;
        for (n = 0, m = 40000; n < m; n += 4) {
            pix[n + 3] = 255;
            pix[n + 1] = 255;
            pix[n + 2] = 0;
            pix[n] = 0;
        }
        var u = 0;
        for (na = 0, ma = 40000; na < ma; na++) {
            k++;
            if (k == 1) { k = 0; na += 3; }
            for (no = 0, mo = 162; no < mo; no++) {
                if (t.charAt(u) == буквы[no]) {
                    pix[na] = знач[no];
                    break;
                }
                if (t.charAt(u) == '[') {
                    pix[na] = 200;
                }
                if (t.charAt(u) == ']') {
                    pix[na] = 199;
                }
                if (t.charAt(u) == '_') {
                    pix[na] = 197;
                }
            }
            текст.putImageData(imgd, 0, 0);
            u++;
            if (u > d) { break; }
        }
    }
    function дешифратор() {
        for (n = 0, m = 40000; n < m; n++) {
            for (na = 0, ma = 162; na < ma; na++) {
                if (pix[n] == знач[na]) {
                    document.querySelector("#сод").innerHTML += буквы[na];
                }
            }
            if (pix[n] == 200) {
                document.querySelector("#сод").innerHTML += '[';
            }
            if (pix[n] == 199) {
                document.querySelector("#сод").innerHTML += ']';
            }
            if (pix[n] == 197) { 
                document.querySelector("#сод").innerHTML += '_'; 
            } 
        } 
        var t = document.querySelector("#сод").innerHTML;
         document.querySelector("#инф").innerHTML = 'length = ' + t.length;
    } </script>
</div>
<script>
var cont = document.querySelector("#source").innerHTML;
document.querySelector("#place").insertAdjacentHTML("afterBegin",cont);
</script>

Это не insertAdjacentHTML, а JS упирался при наличии тега script в строковой константе.

clecar 15.01.2018 17:11

Спасибо, но на Джерри, я вряд ли буду переходить, библиотеку не подключал и не буду. Вероятно по этому ваш код на моём компьютере не работает не в одном браузере. Да открывается, текст вводится но script не работает записи в PNG нет. Мой то код ведь сам по себе, стабильно работает с сервером во всех имеющихся у меня браузерах. А браузеры на базе Хром требуют URL BASE 64 поэтому без сервера не работает. На базе Firefox , без проблем. Без библиотеки вероятно теряется imgd.data. Спасибо не очень, но помогли ставлю Вам плюс.

clecar 15.01.2018 18:16

<center><p><h2>СОХРАНЕНИЕ ТЕКСТА В ФАЙЛЕ PNG.</h2></p></center>

<input type="text"   id="b"  style='position: absolute; background:#faf; top:60px; left:270px; width:800px; ' >
<div id='сод' style='position: absolute; background:#fdd; padding: 10px; word-break: break-all; overflow-y: scroll; font-size: 18px; top:110px; left:270px; width:800px; height:500px;'></div>
<div style='position: absolute; text-align: center;  font-size: 18px;background:#ccf; top:110px; left:10px; width:250px; height:500px;'>
<img id='ш' src='./r1.png' />
<canvas id='прячу' width="100" height="100"></canvas><br><br>
<div id='инф'>0</div><br>
<input type="button"   value="очистиь" onclick="и.прячу.width=и.прячу.width; и.сод.innerHTML='';
и.b.value=''; и.b.focus();">
<input type="button"   value="запомнить" onclick="тор(); "><br><br>
<input type="button"   value="посмотреть" onclick="дешифратор(); "><br><br>
<input type="button" value="обновить" onclick="location.reload(); "><br>
После загрузки этой страницы нажмите <b>обновить</b> затем кнопку <b>посмотреть</b>
</div>

<script>
var и=document.all;
var номер=0;
var знак=[];
var текст=и.прячу.getContext('2d');
 текст.drawImage((и.ш),0,0,100,100);
  var imgd = текст.getImageData(0, 0, 100, 100);
 pix = imgd.data;
var буквы = [' ','ё',"й","ц","у","к","е","н","г","ш","щ","з","х","ъ","ф","ы","в","а","п","р","о","л","д","ж","э","я","ч","с","м","и","т","ь","б","ю",'1','2','3','4','5','6','7','8','9','0','-','+','=',";","'",'#','№','%','&','?','*','(',')','{','}','<','>','|','/',':','_',',','.','"','Ё','Й','Ц','У','К','Е','Н','Г','Ш','Щ','З','Х','Ъ','Ф','Ы','В','А','П','Р','О','Л','Д','Ж','Э','Я','Ч','С','','М','И','Т','Ь','Б','Ю','Q','W','E','R','T','Y','U','I','O','P','A','S','D','F','G','H','J','K','L','Z','X','C','V','B','N','M',"q","w","e","r","t","y","u","i","o","p","a","s","d","f","g","h","j","k","l","z","x","c","v","b","n","m"];
var знач=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,70,71,72,73,74,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162];
var k=0; и.b.focus();
 function тор(e){
 var t=и.b.value; 
и.инф.innerHTML='length = '+t.length;
 var d=t.length;
 for(n=0,m=40000;n<m; n+=4){pix[n+3]=255; pix[n+1]=255; pix[n+2]=0; pix[n]=0;}
 var u=0;
for(na=0,ma=40000;na<ma;na++){ 
k++; if(k==1){k=0; na+=3;}
for(no=0,mo=162;no<mo;no++){if(t.charAt(u)==буквы[no]){pix[na]=знач[no]; break;}
if(t.charAt(u)=='['){pix[na]=200;} 
  if(t.charAt(u)==']'){pix[na]=199;}
 if(t.charAt(u)=='_'){pix[na]=197;}
 }
текст.putImageData(imgd, 0, 0);
u++; if(u>d){break;}
}
}
 function дешифратор(){
for(n=0, m=40000; n<m; n++){
for(na=0, ma=162; na<ma; na++){
if(pix[n]==знач[na]){и.сод.innerHTML+=буквы[na];}	
  }
if(pix[n]==200){и.сод.innerHTML+='['; }
if(pix[n]==199){и.сод.innerHTML+=']'; }
if(pix[n]==197){и.сод.innerHTML+='_'; }
}
var t=и.сод.innerHTML; 
и.инф.innerHTML='length = '+t.length;
}
</script>

Dilettante_Pro 15.01.2018 18:37

clecar,
Цитата:

Сообщение от clecar
но на Джерри, я вряд ли буду переходить, библиотеку не подключал и не буду.

Что такое Джерри? Какая библиотека? Этот код работает без дополнительных библиотек.
Цитата:

Сообщение от clecar
стабильно работает с сервером во всех имеющихся у меня браузерах. А браузеры на базе Хром требуют URL BASE 64 поэтому без сервера не работает.

Программу по вашей ссылке я открывал именно в Хроме - работает и ничего не просит.
Цитата:

Сообщение от clecar
Без библиотеки вероятно теряется imgd.data

Какой библиотеки? Это массив объекта HTML-элемента canvas, полученного с помощью getImageData.

clecar 16.01.2018 00:29

Да спасибо разобрался, извините перепутал query с jQuery
Однако у меня этот пример не работает не работает. Хотел посмотреть а будет ли мой код здесь работать, но забыл как запускать.

Да но и копия тоже не работает. Если у Вас действительно работает наберите просто текст поместите
в картинку и покажите. В вашем примере осталась моя картинка. Очистите и напишите просто ПРИВЕТ.

clecar 16.01.2018 07:12

Пользы от такого кода пока нет. Сколько не бился над ним, ерунда.
Да он считывает информацию из рисунка, но с canvas не работает.
Пробовал подключить внешний скрипт, и имея информацию записывать там.
Этот код обращается к внешнему файлу только один раз при загрузке, когда информации ещё нет.

clecar 16.01.2018 09:39

УРА! Уже почти сдался а оказалось то совсем просто,
<div id = "source" ></div> Вы зачем то весь html текст взяли в этот контейнер
да ещё и none, чтоб подольше голову ломал и не всё перевели с моего 'и',
правда пришлось ещё функцию
onload=function(){ grek();}
	var текст = document.querySelector("#прячу").getContext('2d');
	function grek(){
	document.querySelector("#b").focus();
	document.querySelector("#b").value='';
	(document.querySelector("#прячу")).width=(document.querySelector("#прячу")).width;
	document.querySelector("#сод").innerHTML='';
	}
Большое спасибо здорово.

Dilettante_Pro 16.01.2018 10:29

clecar,
Цитата:

Сообщение от clecar
<div id = "source" ></div> Вы зачем то весь html текст взяли в этот контейнер

Дело в том, что я пытался сделать на форуме более-менее работающий пример, но оттуда нет доступа к вашему файлу r1.png - поэтому исходный текст поместил в скрытый контейнер.
Кроме того, из-за особенностей размещения кода на форуме пришлось убрать var и=document.all;
а также, вместо обращения к элементу по id, добавить поиск элемента по id document.querySelector("#id")

clecar 16.01.2018 10:35

Понятно я виноват, исходный текст в общем то и не нужен. Не объяснил толком.

clecar 19.01.2018 07:27

&gt; &lt; мне то и надо было просто поменять это на соответственно ><
А ещё проще дешифрировать не в div а в input type="text"; И нет проблем. Странно в поисковике так и не встретил ничего об этом.


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