Перейти к публикации

Не работают функции в устаревших браузерах


Рекомендованные сообщения

Добрый день.

В 17 релизе, в устаревших браузерах перестали работать многие функции, такие как: лайки, ответы на комментарии, цитирование, жалобы и тд. При нажатии, просто перекидывает на якорь "#".  В 16.1 еще работали нормально.

Например для моих задач это критично, в моей стране специфичная аудитория и очень много кто до сих пор пользуются старыми смартфонами, где браузеры еще Android 4.0+. Так вот у всех пропал функционал.

В консоли ошибка (Uncaught SyntaxError: Unexpected token =) ругается на dle_js.js, а именно на:

function DLEprompt(message, d, title, callback, allowempty, type = 'text'){

	var b = {};

	b[dle_act_lang[3]] = function() { 
					$(this).dialog("close");						
			    };

	b[dle_act_lang[2]] = function() { 
					if ( !allowempty && $("#dle-promt-text").val().length < 1) {
						 $("#dle-promt-text").addClass('ui-state-error');
					} else {
						var response = $("#dle-promt-text").val()
						$(this).dialog("close");
						$("#dlepopup").remove();
						if( callback ) callback( response );	
					}				
				};

	$("#dlepopup").remove();

	$("body").append("<div id='dlepopup' class='dle-promt' title='" + title + "' style='display:none'>"+ message +"<br><br><input type='"+ type +"' dir='auto' name='dle-promt-text' id='dle-promt-text' class='ui-widget-content ui-corner-all' style='width:97%;' value='" + d + "'/></div>");

	$('#dlepopup').dialog({
		autoOpen: true,
		width: 500,
		resizable: false,
		dialogClass: "modalfixed dle-popup-promt",
		buttons: b
	});

	$('.modalfixed.ui-dialog').css({position:"fixed"});
	$('#dlepopup').dialog( "option", "position", { my: "center", at: "center", of: window } );

	if (d.length > 0) {
		$("#dle-promt-text").select().focus();
	} else {
		$("#dle-promt-text").focus();
	}

};

И ошибка (Uncaught SyntaxError: Unexpected token =>) на:

function removeEmptyElements(arr) {
	return arr.filter(el => el !== '');
}

Как быть-то? Как поправить это дело? В предыдущих версиях все работало как положено. 

Ссылка на сообщение
Поделиться на других сайтах
38 минут назад, sergoxa сказал:

Например для моих задач это критично, в моей стране специфичная аудитория и очень много кто до сих пор пользуются старыми смартфонами, где браузеры еще Android 4.0+. Так вот у всех пропал функционал.

Мне очень жаль, но эти операционные системы уже много лет как официально не поддерживаются и также нет их поддержки DLE. Вам нужно в таком случае пользоваться старыми версиями DLE. В новых версиях постоянно добавляется новый функционал, который работает исключительно на более актуальных технологиях. И проблемы у вас будут не только в этом коде, но и в большом количестве другого кода.

Можете например переписать эту функцию например на:

function removeEmptyElements(arr) {
    var newArray = [];
    for (var i = 0; i < arr.length; i++) {
        if (arr[i] !== '') {
            newArray.push(arr[i]);
        }
    }
    return newArray;
}

Это будет работать в старых браузерах. Но официальной поддержки этих браузерах не будет, и править и переписывать вам это и другое уже нужно будет самостоятельно, потому что мы не пишем кодов на заказ.

Поэтому оптимальным для вас будет, если вам нужна поддержка очень старого оборудования, пользоваться именно старыми версиями DLE.

Ссылка на сообщение
Поделиться на других сайтах
1 час назад, celsoft сказал:

Мне очень жаль, но эти операционные системы уже много лет как официально не поддерживаются и также нет их поддержки DLE. Вам нужно в таком случае пользоваться старыми версиями DLE. В новых версиях постоянно добавляется новый функционал, который работает исключительно на более актуальных технологиях. И проблемы у вас будут не только в этом коде, но и в большом количестве другого кода.

Можете например переписать эту функцию например на:


function removeEmptyElements(arr) {
    var newArray = [];
    for (var i = 0; i < arr.length; i++) {
        if (arr[i] !== '') {
            newArray.push(arr[i]);
        }
    }
    return newArray;
}

Это будет работать в старых браузерах. Но официальной поддержки этих браузерах не будет, и править и переписывать вам это и другое уже нужно будет самостоятельно, потому что мы не пишем кодов на заказ.

Поэтому оптимальным для вас будет, если вам нужна поддержка очень старого оборудования, пользоваться именно старыми версиями DLE.

В 16.1 Все идеально работало, неужели в 17 все так поменялось кардинально? Ваша правка результата никакого не дала.

Методом тыка заменил часть кода, таким образом получилось:

function DLEprompt(message, d, title, callback, allowempty){

	var b = {};

	b[dle_act_lang[3]] = function() { 
					$(this).dialog("close");						
			    };

	b[dle_act_lang[2]] = function() { 
					if ( !allowempty && $("#dle-promt-text").val().length < 1) {
						 $("#dle-promt-text").addClass('ui-state-error');
					} else {
						var response = $("#dle-promt-text").val()
						$(this).dialog("close");
						$("#dlepopup").remove();
						if( callback ) callback( response );	
					}				
				};

	$("#dlepopup").remove();

	$("body").append("<div id='dlepopup' class='dle-promt' title='" + title + "' style='display:none'>"+ message +"<br /><br /><input type='text' name='dle-promt-text' id='dle-promt-text' class='ui-widget-content ui-corner-all' style='width:97%;' value='" + d + "'/></div>");

	$('#dlepopup').dialog({
		autoOpen: true,
		width: 500,
		resizable: false,
		dialogClass: "modalfixed dle-popup-promt",
		buttons: b
	});

	$('.modalfixed.ui-dialog').css({position:"fixed"});
	$('#dlepopup').dialog( "option", "position", { my: "center", at: "center", of: window } );

	if (d.length > 0) {
		$("#dle-promt-text").select().focus();
	} else {
		$("#dle-promt-text").focus();
	}

};

и здесь получилось так:

function removeEmptyElements(arr) {
    return arr.filter(function(el) {
        return el !== '';
    });
}

По итогу все заработало в страых браузерах. Чем чревато могут быть мои изменения? На что они могут повлиять, либо, что не может в таком случае работать?

Ссылка на сообщение
Поделиться на других сайтах
10 часов назад, sergoxa сказал:

В 16.1 Все идеально работало, неужели в 17 все так поменялось кардинально?

Дело не в кардинальности, а в появлении нового функциоала. Который мы пишем с учетом поддерживаемого железа и браузеров, без тестирования на древнейшем железе и без оглядки на него. Это старое железо больше не поддерживается никем. Поэтому для старого железа нельзя постоянно переходить на новое ПО. Оно устарело, оно не не предназначего ни для нового кода ни для новых функций. Например вы своими правками его убрали из функции и как следствие часть нового будет работать некорректно, не так как задумывалось собственно при разработке актуальной версии.

Функцию removeEmptyElements вы точно исправили неправильно, вы исправили конструкцию которая вызывала синтаксическую ошибки в файле целиком, в результате пропала ошибка просто при загрузке этого файла, но не исправили проблему если эта функция будет запущена старым устройством, потому как функция filter им тоже будет неизвестна и соответственно ошибка произойдет в моментах когда функция будет запускаться. Изменить лучше именно на код который я написал. А не работало у вас потому что я не писал вам код правки для функции DLEprompt. А дал лишь один пример одного исправления, потому как я не пишу кодов на заказ. Я же написал что проблем разных много будет, то что вы их сразу не замечаете, это не значит что их нет, просто они проявляются при осуществлении каких то определенных действий или набора действий. Функций же очень много в DLE

Ссылка на сообщение
Поделиться на других сайтах
1 час назад, celsoft сказал:

Дело не в кардинальности, а в появлении нового функциоала. Который мы пишем с учетом поддерживаемого железа и браузеров, без тестирования на древнейшем железе и без оглядки на него. Это старое железо больше не поддерживается никем. Поэтому для старого железа нельзя постоянно переходить на новое ПО. Оно устарело, оно не не предназначего ни для нового кода ни для новых функций. Например вы своими правками его убрали из функции и как следствие часть нового будет работать некорректно, не так как задумывалось собственно при разработке актуальной версии.

Функцию removeEmptyElements вы точно исправили неправильно, вы исправили конструкцию которая вызывала синтаксическую ошибки в файле целиком, в результате пропала ошибка просто при загрузке этого файла, но не исправили проблему если эта функция будет запущена старым устройством, потому как функция filter им тоже будет неизвестна и соответственно ошибка произойдет в моментах когда функция будет запускаться. Изменить лучше именно на код который я написал. А не работало у вас потому что я не писал вам код правки для функции DLEprompt. А дал лишь один пример одного исправления, потому как я не пишу кодов на заказ. Я же написал что проблем разных много будет, то что вы их сразу не замечаете, это не значит что их нет, просто они проявляются при осуществлении каких то определенных действий или набора действий. Функций же очень много в DLE

Спасибо за подробное разъяснение, вопросов больше нет. 

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...