Javascript.RU

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

Получить переменную из функции
Доброго дня всем!
С javascript знаком слабо поэтому не могу дернуть переменную из вложеной функции. Помогите советом. Переменная my_canvas как ее получить в глобальной области видимости ?
PngToy.prototype.fetchDataURL = function(a) {
    var b = this;
    return b.url = a, b.buffer = b.chunks = b.view = null, b._pos = 0, new Promise(function(c, d) {
        try {
            for (var e = new ArrayBuffer(a.length), f = new Uint8Array(e), g = 0, h = a.length; g < h; g++) f[g] = a.charCodeAt(g);
            var i, j = new DataView(e);
            2303741511 === j.getUint32(0) && 218765834 === j.getUint32(4) ? (b.buffer = j.buffer, b.view = j, i = PngToy._getChunks(b.buffer, b.view, b.doCRC, b.allowInvalid), b.chunks = i.chunks || null, b.chunks || b.allowInvalid ? c() : d(i.error)) : d("Not a PNG file.")
        } catch (a) {
            d(a.message)
        }
    })
}, $(function() {
    function a() {

        var a, c = !0,
            d = g(),
            h = g(),
            i = g(),
            j = "BrowserLeaks,com <canvas> 1.0",
            k = document.getElementById("iframe").contentDocument.createElement("canvas");
        if (k.getContext && (a = k.getContext("2d"))) {
            if (d = f(), "function" == typeof k.getContext("2d").fillText) {
                h = f();
                try {
                    k.setAttribute("width", 220), k.setAttribute("height", 30), a.textBaseline = "top", a.font = "14px 'Arial'", a.textBaseline = "alphabetic", a.fillStyle = "#f60", a.fillRect(125, 1, 62, 20), a.fillStyle = "#069", a.fillText(j, 2, 15), a.fillStyle = "rgba(102, 204, 0, 0.7)", a.fillText(j, 4, 17)
                } catch (b) {
                    console.warn("false", b), k = document.createElement("canvas"), a = k.getContext("2d"), "undefined" == typeof a || "function" != typeof k.getContext("2d").fillText ? (d = g(), h = g(), c = !1) : (k.setAttribute("width", 220), k.setAttribute("height", 30), a.textBaseline = "top", a.font = "14px 'Arial'", a.textBaseline = "alphabetic", a.fillStyle = "#f60", a.fillRect(125, 1, 62, 20), a.fillStyle = "#069", a.fillText(j, 2, 15), a.fillStyle = "rgba(102, 204, 0, 0.7)", a.fillText(j, 4, 17))
                }
            } else c = !1;
            if (c && "function" == typeof k.toDataURL) {
                var l;
                try {
                    if (l = k.toDataURL("image/png"), "boolean" == typeof l || "undefined" == typeof l) throw e
                } catch (a) {
                    l = ""
                }
                0 === l.indexOf("data:image/png") ? i = f() : c = !1
            } else c = !1
        } else c = !1;
        if ((d), (h), (i), c) {
            b(a, l)
        } else $.post( "../detect2.php", { canvas: "false" })
    }

    function b(a, b) {
        var d = atob(b.replace("data:image/png;base64,", ""));
        var l = new PngToy([{
            doCRC: "true"
        }]);
        l.fetchDataURL(d).then(function(a) {
            function b(a, b) {
                var c = "";
                return "IHDR" == a ? (c = "PNG image header: ", c += b.width + "x" + b.height + ", ", c += b.depth + " bits/sample, ", 0 == b.type ? c += "grayscale, " : 2 == b.type ? c += "truecolor, " : 3 == b.type ? c += "paletted, " : 4 == b.type ? c += "grayscale+alpha, " : 6 == b.type && (c += "truecolor+alpha, "), "0" == b.interlaced ? c += "noninterlaced, " : "1" == b.interlaced && (c += "interlaced, "), c = c.slice(0, -2)) : "gAMA" == a ? c = "file gamma = : " + b.gamma : "sRGB" == a ? c = "sRGB color space, rendering intent: " + b.desc : "IDAT" == a ? c = "PNG image data" : "IEND" == a && (c = "end-of-image marker"), c
            }
            for (var d, e, f, g = "IHDR,PLTE,sPLT,tRNS,tEXt,gAMA,cHRM,sRGB,hIST,pHYs,bKGD,tIME,sBIT,oFFs,sTER,sCAL,pCAL", h = "", i = 0, j = l.chunks.length; i < j; i++) {
                for (e = l.chunks[i].crc.toString(16); e.length < 8;) e = "0" + e;
                //"IDAT" == l.chunks[i].name && (d = e, $("#crc").html(d.toUpperCase()));
                //"IDAT" == l.chunks[i].name && (d = e, $.post( "../detect2.php", { canvas: (d.toUpperCase()) }));
                "IDAT" == l.chunks[i].name && (d = e, (d.toUpperCase()));
			}
		var my_canvas = (d.toUpperCase());
		alert(my_canvas);
		$.post( "../detect2.php", { canvas: my_canvas} );
        })
    }
	

    function f() {
        return 'True'
    }

    function g() {
        return 'False'
    }
    "undefined" != typeof window.atob && "function" == typeof Promise && "function" == typeof ArrayBuffer || ($.ajaxSetup({
        cache: !0,
        async: !1
    }), $.getScript("./js/canvas-polyfills.js")), a()
});

Последний раз редактировалось jorah, 28.05.2017 в 21:05.
Ответить с цитированием
  #2 (permalink)  
Старый 28.05.2017, 11:06
Кандидат Javascript-наук
Отправить личное сообщение для Diphenyl Oxalate Посмотреть профиль Найти все сообщения от Diphenyl Oxalate
 
Регистрация: 21.01.2017
Сообщений: 139

"Выдернуть" её не получится. Остаётся только сделать её глобальной.
Ответить с цитированием
  #3 (permalink)  
Старый 28.05.2017, 16:04
Новичок на форуме
Отправить личное сообщение для jorah Посмотреть профиль Найти все сообщения от jorah
 
Регистрация: 28.05.2017
Сообщений: 4

А как это сделать ?
Я ее могу отправить аяксом, но мне нужно собрать данные из нескольких скриптов и отправить одним постом. Вот я и пытаюсь ее получить.
Могу записать в id на странице но дернуть от туда тоже не получается.
Ответить с цитированием
  #4 (permalink)  
Старый 28.05.2017, 17:09
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от Rise Посмотреть сообщение
jorah, у тебя смайлик в коде начни с этого.
Смайлик как бы намекает что все будет хорошо и все получится!
Ответить с цитированием
  #5 (permalink)  
Старый 28.05.2017, 17:50
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

jorah,
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
Ответить с цитированием
  #6 (permalink)  
Старый 28.05.2017, 21:14
Новичок на форуме
Отправить личное сообщение для jorah Посмотреть профиль Найти все сообщения от jorah
 
Регистрация: 28.05.2017
Сообщений: 4

Спасибо, что ткнули, исправил.
61-ая строка, как мне my_canvas получить на странице ?
даже если я всталяю тег с id
<span id="crc" style="display:none;"></span>

Писать то пишет, туда переменную, но получить не выходит.
пробую так
var my_canvas = $('#crc').html();

Походу пишет позже или я чейто не понимаю, ну слаб в javascript епсель ))
Отправить из скрипта через ajax тоже получается, но поскольку скриптов куча, каждый ajax собирать в php тоже не есть гуд. Хочется отправить одним post собрав все воедино.
Ответить с цитированием
  #7 (permalink)  
Старый 28.05.2017, 21:18
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

если вывести то
$('#crc').html(my_canvas);
Ответить с цитированием
  #8 (permalink)  
Старый 28.05.2017, 21:39
Новичок на форуме
Отправить личное сообщение для jorah Посмотреть профиль Найти все сообщения от jorah
 
Регистрация: 28.05.2017
Сообщений: 4

Сообщение от j0hnik Посмотреть сообщение
если вывести то
$('#crc').html(my_canvas);
Все верно, 57 строка в коментах с удовольствием выводит это. Но вот от безисхода я пытаюсь подхватить ее (ну после того как она обработана)
<span id="crc" style="display:none;"></span>

вот так и уже рулить ей как хочу, но пустая блин
var bery_na_starnice = $('#crc').html();


Вообще это круто, что нельзя ее достать и меня устраивает, что можно отправить ее в php. Но скриптов у меня несколько подобных и тут нужно либо ставить идентификатор что б ловить все отдельные ajax post для одной загрузки страницы, ну или есть магия синхронизации ajax чтоб он отправил все post из всех скриптов одним массивом о которой я не знаю, поэтому и хочу подтянуть эту переменную, что б потом отправить одним массивом все данные.
Ответить с цитированием
  #9 (permalink)  
Старый 28.05.2017, 21:41
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

aaaa вот вы о чем. ну не надо этого делать.

<head>
	<meta charset="utf-8">
</head>
<body>
	<script>
		var a = (function(){
			var a = (function(){
				var a = (function(){
					return 20;
				})();
				return a;
			})();
			return a;
		})();
alert(a);
	</script>
</body>
Ответить с цитированием
  #10 (permalink)  
Старый 28.05.2017, 21:42
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от jorah
есть магия синхронизации ajax чтоб он отправил все post из всех скриптов одним массивом
Один запрос - один ответ, нельзя все post запросы объединить в один. Значит логика хромает, меняйте ее.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перезаписать переменную после выполнения функции sig jQuery 9 18.01.2016 20:54
Как взять переменную из функции и работать с ней? Seth Общие вопросы Javascript 0 05.12.2015 19:37
Как передать переменную из одной функции в другую? E}|{uk Общие вопросы Javascript 4 30.11.2014 12:03
Получить переменную из функции HackerSniper Общие вопросы Javascript 7 21.10.2011 08:30
Как получить переменную с сервера? DmitryT AJAX и COMET 2 03.08.2011 18:16