Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.11.2018, 03:32
Новичок на форуме
Отправить личное сообщение для bomj Посмотреть профиль Найти все сообщения от bomj
 
Регистрация: 19.11.2018
Сообщений: 7

Как пользователю внести свои данные в скрипт?
Подскажите пожалуйста, как сделать, чтобы любой пользователь мог самостоятельно ввести данные контракта?
Чтобы в строке 47 кода изменился адрес 0xae4243e2c0f910223323dd2f2fdd16820b69f1d6
на свой любой, допустим на адрес 0x41835eba2075d2452fbedeec25bedbbc61d9b8a1
И при нажатии на кнопку 'Get News' получить новую информацию.

<html>
<head>
<meta charset="utf-8">
<script type="text/javascript" src="https://rinkeby.etherscan.io/assets/plugins/jquery/jquery.min.js"></script>
<script type="text/javascript" src="https://rinkeby.etherscan.io/jss/web3.min.js?v=0.20.6"></script>
</head>
<body>
<table><tr><td>
<center>
<button class="knopka" id='btn_5'><a id="my_link" href="https://rinkeby.etherscan.io/writecontract/index.html?a=0xae4243e2c0f910223323dd2f2fdd16820b69f1d6&n=rinkeby"><b><span style="color:black;">Send News</span></b></a></button>
<button type='button' id='btn_5' class="knopka" onclick="ethcall2('getPost', 'input_5','myanswer_5','string', '|string', 'btn_5');">Get News</button>
<div align="left"><b><span id='myanswer_5' style="color:teal"></span></b></div>
</center></body></td></tr></table>

<script>
    $('#overlay', window.parent.document).hide();
    jQuery(window).load(function () {
        $('#overlay').fadeOut("slow");
        
        var obj = window.parent.document.getElementById('readcontractiframe');
        parent.resizeIframe(obj, 0); 
    });
    function getcontractabi(contractaddress) {
        
            $.post("https://Rinkeby.etherscan.io/api",
        
                {
                    module: "contract",
                    action: "getabit",
                    address: contractaddress
                },
                function (data, status) {
                    console.log("contractAbi = " + data)
                });
    }

    var Web3 = require('web3');
    
    var web3 = new Web3(new Web3.providers.HttpProvider("https://rinkeby.infura.io"));
    
    var version = web3.version.api;
    console.log(version); 
    var MyContract;
    var myContractInstance;
    try {
        MyContract = web3.eth.contract([{"constant":true,"inputs":[],"name":"getPost","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newPost","type":"string"}],"name":"setPost","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]);
        myContractInstance = MyContract.at("0xae4243e2c0f910223323dd2f2fdd16820b69f1d6");
    }
    catch (err) {
        console.log(err.message);
    }    
    function ethcall2(strMethodName, strInputElementName, strOutputElementName, strOutputtype, strOutputFieldNames, strBtnName) {        
   
        var functionNametoCall = "myContractInstance." + strMethodName;
        var result;
        try {
            var strparas;
            var elms = document.querySelectorAll("[id=" + strInputElementName + "]");
            //console.log("elms.length = " + elms.length);            
            for (var i = 0; i < elms.length; i++) {
                if (i == 0) {
                    strparas = "'" + add0xforAddress(Escape(elms[i].value)) + "'"
                } else {
                    strparas = strparas + ",'" + Escape(elms[i].value) + "'"
                }
                if (elms[i].value == '') {
                    document.getElementById(strInputElementName).focus();                   
                    alert('Input value cannot be empty');
                    return false;
                }
            }
            showLoading(true, strBtnName);

            new Function(functionNametoCall + "(" + strparas + ", function(err, res){ if (err) {result = err;} else { result = res; } showMessage('" + strMethodName +"',result,'" + strOutputElementName+"','" + strOutputFieldNames +"','"+ strBtnName +"');   });")();

           // result = eval(functionNametoCall + "(" + strparas + ");");
           
           // $('#overlay').show();
        }
        catch (err) {
            //$('#overlay').show();
            result = "" + err + "";
            showLoading(false, strBtnName);
        }
        //setTimeout(function () {
        //    $('#overlay').show();
        //}, 2500);
       
        //document.getElementById(strOutputElementName).innerHTML = "<br><br> [&nbsp;<b>" + strMethodName + "</b> method Response ]<br>" + formatmultipleoutputs(result, strOutputFieldNames) + "<br>";
             
    }

    function showMessage(strMethodName, result, strOutputElementName, strOutputFieldNames, strBtnName) {
        
        document.getElementById(strOutputElementName).innerHTML = "<br><br> [&nbsp;<b>" + strMethodName + "</b> method Response ]<br>" + formatmultipleoutputs(result, strOutputFieldNames) + "<br>";
        showLoading(false, strBtnName);  
    }

    function showLoading(isShow, strBtnName) {
        
        if (isShow) {
            $(" <img id='waiting_" + strBtnName + "' class='waitingImg' src='https://etherscan.io/images/ajax-loader2.gif' style='margin-left:5px;' alt='Loading' />").insertAfter($('#' + strBtnName));
            $('#' + strBtnName).prop('disabled', true);
        } else {
            $('#' + strBtnName).prop('disabled', false);
            $('#waiting_' + strBtnName).remove(); 
        }
    }

    function Escape(val) {
        return val.replace(/'/g, "\\u0027");
    }

    function formatmultipleoutputs(strVal, strOutputFieldNames) {
        var strAnswer = '';
        //console.log("strVal = " + strVal);
        //console.log("strOutputFieldNames = " + strOutputFieldNames);
        //console.log("strVal.length = " + strVal.length);
        if (strOutputFieldNames.includes(';') == true) {
            var res_2 = strOutputFieldNames.split(';');
            for (i = 0; i < strVal.length; i++) {
                var tmparray = res_2[i].toString().split('|');
                strAnswer = strAnswer + "&nbsp;<font color='green'><i class='fa  fa-angle-double-right'></i></font> ";
                if (res_2[i] != null && res_2[i].toString() != '') {
                    strAnswer = strAnswer + " <b>" + tmparray[0] + "</b> &nbsp; <font color='silver'><i>" + tmparray[1] + "</i></font> <b>:</b> &nbsp;"
                }
                strAnswer = strAnswer + formatresult(strVal[i].toString(), tmparray[1]) + "<br>";
            }
        } else {
            strAnswer = strAnswer + "&nbsp;<font color='green'><i class='fa  fa-angle-double-right'></i></font> ";
            if (strOutputFieldNames != '') {
                var tmparray = strOutputFieldNames.toString().split('|');
                strAnswer = strAnswer + " <b>" + tmparray[0] + "</b> &nbsp; <font color='silver'><i>" + tmparray[1] + "</i></font> <b>:</b> &nbsp;";
                strVal = formatresult(strVal.toString(), tmparray[1])
            }
            strAnswer = strAnswer + replaceAll(strVal, ",", "<br>&nbsp;<font color='green'><i class='fa  fa-angle-double-right'></i></font> ") + "<br>";
        }
        return strAnswer;
    }

    function htmlEncode(value) {
        return $('<div/>').text(value).html();
    }
    function replaceAll(str, find, replace) {
        return str.replace(new RegExp(find, 'g'), replace);
    }
    function formatresult(strResult, resulttype) {
        if (resulttype.startsWith('uint')) {
            return toFixed(strResult);
        } else if (resulttype == 'string') {
            return htmlEncode(strResult);
            //return hex_to_ascii(strResult);
        } else if (resulttype == 'address') {
            if (strResult != '0x0000000000000000000000000000000000000000') {
                return "<a href='/address/" + strResult + "' target='_blank'>" + strResult + "</a>";
            } else {
                return htmlEncode(strResult);
            }
            //} else if (resulttype == 'bool') {
            //    return Boolean(remove0x(strResult));
        } else {
            return htmlEncode(strResult);
        }
    }
    function hex_to_ascii(str1) {
        var hex = str1.toString();
        var str = '';
        for (var n = 0; n < hex.length; n += 2) {
            str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));
        }
        return str;
    }
    function extractaddress(str1) {
        if (str1.length > 40) {
            str1.substr(str1.length - 40)
        }
        return str1;
    }
    function remove0x(str1) {
        if (str1.startsWith("0x") == true) {
            str1 = str1.substr(str1.length - str1.length + 2);
        }
        return str1;
    }
    function add0xforAddress(straddress) {
        straddress = straddress.trim();
        if (straddress.startsWith("0x") == false && straddress.length == 40) {
            straddress = "0x" + straddress;
        }
        return straddress;
    }
    function toFixed(x) {
        if (x.indexOf("e+") !== -1) {
            var value = web3.toBigNumber(x);
            x = value.toString(10);
        }
        return x;
    }     
    setTimeout(function () {
       
    }, 0);

</script>

</html>

Последний раз редактировалось bomj, 28.12.2018 в 19:14.
Ответить с цитированием
  #2 (permalink)  
Старый 20.11.2018, 02:37
Новичок на форуме
Отправить личное сообщение для bomj Посмотреть профиль Найти все сообщения от bomj
 
Регистрация: 19.11.2018
Сообщений: 7

Как пользователю внести свои данные в скрипт?
1. Мне уже подсказали ранее скрипт для изменения ссылки
'Send News'
После <table> в строке 008 добавляется код со скриптом:
<tr>
    <td>
      <!-- Чуть усложнили -->
      <input type="text" id="txt_addr2"/>      
    </td>
    <td>
      <input type="button" id="btn2" value="Подставить адрес из поля в Ваш код">
      <script>
			function addFunc2(){
				if (document.getElementById("txt_addr2").value.trim().length == 0) 				{
 			 	alert('Адрес не введен!');
  			} else {
			  	var new_addr = document.getElementById("txt_addr2").value;
			  	document.getElementById("my_link").href = "https://rinkeby.etherscan.io/writecontract/index.html?a=" + new_addr + "&n=rinkeby";
			  	alert("Адрес '" + new_addr + "' подставлен! Теперь закройте это окно и нажмите свою серую кнопку 'Send & News'");
			  }
			}
			document.getElementById("btn2").onclick = addFunc2;
			</script>      
    </td>
  </tr> 

  
</table>


И теперь после внесения в поле: 0x41835eba2075d2452fbedeec25bedbbc61d9b8a1
Изменяется ссылка при нажатии на 'Send News'
Вот что получилось: https://wall.0xbt.net/ball5.html
Так было: https://wall.0xbt.net/ball4.html
Я прошу прощения если что-то нарушаю, вижу здесь не приняты ссылки

2. Так же были предложен вариант для решения главной задачи:
заменить код в строке 47
Код:
myContractInstance = MyContract.at("0xae4243e2c0f910223323dd2f2fdd16820b69f1d6");
на
Код:
myContractInstance = MyContract.at(document.getElementById("txt_addr2").value);
используя для этого скрипт для замены ссылки.
Но что-то не срастается.
Может у вас есть какие либо решения или подсказки?
Ответить с цитированием
  #3 (permalink)  
Старый 22.11.2018, 03:42
Новичок на форуме
Отправить личное сообщение для bomj Посмотреть профиль Найти все сообщения от bomj
 
Регистрация: 19.11.2018
Сообщений: 7

Как пользователю внести свои данные в скрипт?
Я прошу прощения. Впервые здесь.
Может я что делаю не так или неправильно ставлю вопрос?
Ответить с цитированием
  #4 (permalink)  
Старый 22.11.2018, 08:28
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от bomj
parent.resizeIframe(obj, 0);
это что? может закомментировать на время эту строку?

Последний раз редактировалось рони, 22.11.2018 в 08:32.
Ответить с цитированием
  #5 (permalink)  
Старый 24.11.2018, 02:18
Новичок на форуме
Отправить личное сообщение для bomj Посмотреть профиль Найти все сообщения от bomj
 
Регистрация: 19.11.2018
Сообщений: 7

Сообщение от рони Посмотреть сообщение
Код:
parent.resizeIframe(obj, 0);
это что? может закомментировать на время эту строку?
1. Попробовал закомментировать.
Все в том же духе.
2. Закомменировал все что можно (вы уж извините за безграмотность,
я понимаю, что это все равно что кувалдой в операционной)
Все так же.
3. Спрятал часть скрипта.
4. Добавил поле и подвязал к кнопке 'Get News', не работает так как
хотелось, но результаты интересные. Подставил в данную кнопку ссылку для визуализации, иногда думаю для решения задачи стоит взелянуть.
Варианты:
https://wall.0xbt.net/ball8.html
https://wall.0xbt.net/ball9.html
https://wall.0xbt.net/ball10.html
https://wall.0xbt.net/ball11.html

Вот что осталось в результате:
<html>
<head>
<meta charset="utf-8">
<script type="text/javascript" src="https://rinkeby.etherscan.io/assets/plugins/jquery/jquery.min.js"></script>
<script type="text/javascript" src="https://rinkeby.etherscan.io/jss/web3.min.js?v=0.20.6"></script>
<!-- <script type="text/javascript" src="https://wall.0xbt.net/r1.js"></script> -->
</head>
<body>
<table>
<table>
 
<tr>
    <td>
      <!-- Поле для 'Send News' -->
      <input type="text" id="txt_addr2"/>      
    </td>
    <td>
      <input type="button" id="btn2" value="Подставить адрес из поля в 'Send News'">
      <script>
			function addFunc2(){
				if (document.getElementById("txt_addr2").value.trim().length == 0) 				{
 			 	alert('Адрес не введен!');
  			} else {
			  	var new_addr = document.getElementById("txt_addr2").value;
			  	document.getElementById("my_link").href = "https://rinkeby.etherscan.io/writecontract/index.html?a=" + new_addr + "&n=rinkeby";
			  	alert("Адрес '" + new_addr + "' подставлен! Закройте это окно и нажмите кнопку 'Send & News'");
			  }
			}
			document.getElementById("btn2").onclick = addFunc2;
			</script>       
    </td>
  </tr>
  
      <td>
      <!-- Поле для 'Get News' -->
      <input type="text" id="0xae4243e2c0f910223323dd2f2fdd16820b69f1d6"/>      
    </td>
    <td>
      <input type="button" id="btn_3" value="Подставить адрес из поля в 'Get News'">
      <script>
			function addFunc2(){
				if (document.getElementById("0xae4243e2c0f910223323dd2f2fdd16820b69f1d6").value.trim().length == 0) 				{
 			 	alert('Адрес не введен!');
  			} else {
			    
			  	var new_addr = document.getElementById("0xae4243e2c0f910223323dd2f2fdd16820b69f1d6").value;
			  	document.getElementById("my_code").text = "https://rinkeby.etherscan.io/writecontract/index.html?a=" + new_addr + "&n=rinkeby";
			  	alert("Адрес '" + new_addr + "' подставлен! Закройте это окно и нажмите кнопку 'Get & News'");
			  }
			}
			document.getElementById("btn_3").onclick = addFunc2;
			</script>      
    </td>
  </tr>
  
</table>
 <tr><td>

<button class="knopka" id='btn_5'><a id="my_link" href="https://rinkeby.etherscan.io/writecontract/index.html?a=0xae4243e2c0f910223323dd2f2fdd16820b69f1d6&n=rinkeby"><span style="color:black;">Send News</span></a></button>
<!-- <input type="text" id="contract_instance" /> -->
<!-- <input type="text" id="0xae4243e2c0f910223323dd2f2fdd16820b69f1d6" /> -->
<button type='button' id='btn' class="knopka" onclick="ethcall2('getPost','input','myanswer','string', '|string', 'btn');"><a id="my_code" href="https://rinkeby.etherscan.io/writecontract/index.html?a=0xae4243e2c0f910223323dd2f2fdd16820b69f1d6&n=rinkeby" target="_blank">Get </a><i class="fa fa-btc"></i> News</button>
<div align="left"><b><span id='myanswer' style="color:teal"></span></b></div>
</body></td></tr></table>

 <script>
    var web3 = new Web3(new Web3.providers.HttpProvider("https://rinkeby.infura.io"));
    
    var version = web3.version.api;
    try {
        MyContract = web3.eth.contract([{"constant":true,"inputs":[],"name":"getPost","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newPost","type":"string"}],"name":"setPost","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]);
        myContractInstance = MyContract.at(document.getElementById('0xae4243e2c0f910223323dd2f2fdd16820b69f1d6').value);
		myContractInstance = MyContract.at("0xae4243e2c0f910223323dd2f2fdd16820b69f1d6");
    }
    catch (err) {
        console.log(err.message);
    }
</script>
<script type="text/javascript" src="https://wall.0xbt.net/r1.js"></script>

</html>


Такое ощущение, что решение где-то рядом.
Еще раз прошу прощение за тупость.

Последний раз редактировалось bomj, 28.12.2018 в 19:17.
Ответить с цитированием
  #6 (permalink)  
Старый 26.11.2018, 02:38
Новичок на форуме
Отправить личное сообщение для bomj Посмотреть профиль Найти все сообщения от bomj
 
Регистрация: 19.11.2018
Сообщений: 7

Как пользователю внести свои данные в скрипт?
Неужели нет вариантов решения данной задачи???
Ответить с цитированием
  #7 (permalink)  
Старый 03.12.2018, 06:26
Новичок на форуме
Отправить личное сообщение для bomj Посмотреть профиль Найти все сообщения от bomj
 
Регистрация: 19.11.2018
Сообщений: 7

Как пользователю внести свои данные в скрипт?
Есть ли у кого-то какие-то мысли?
Неужели не интересно найти решение данной задачи?
Если конечно решение существует....
Ответить с цитированием
  #8 (permalink)  
Старый 03.12.2018, 08:11
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

bomj,
попробуйте создавайть ваш обьект в функции addFunc2().
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как с помощью javascript взять данные из одного файла html и закинуть в другой? rusik Общие вопросы Javascript 10 08.08.2016 12:11
Как правильно внести изменения в скрипт таймера обратного отсчета времени? LADYX Элементы интерфейса 2 26.07.2016 22:25
Как из php файла передать данные в переменную javascript angelzzz Общие вопросы Javascript 36 01.07.2016 15:54
как передавать данные из html? carder Общие вопросы Javascript 5 27.02.2016 19:46
Как лучше всего добавлять на страницу данные, пришедшие в json? ogurchik AJAX и COMET 7 08.10.2015 15:01