Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
-4 / -2 / 1
Регистрация: 22.07.2017
Сообщений: 143
1

Заглушки для старых версий браузеров

19.02.2018, 14:53. Показов 1782. Ответов 5
Метки нет (Все метки)

Всем привет.Как быть с заглушками для браузеров?дело в том что почти всё освоил про flexbox и узнал то что многие браузеры не поддерживают эту технологию в css
и у меня появилась идея как блокировать те браузеры которые эти свойства не поддерживают и вот код php

PHP
1
2
3
4
5
6
7
8
if($_SERVER['HTTP_USER_AGENT'] == 'Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.2.15 Version/10.10'){
$g = '<div style="margin:0 auto 20px auto;background:blue;width:350px;color:white">
<p>вы используете браузер опера.поменяйте его на хром так как этот браузер слишком плохой и не поддерживает множество всего</p>
<a href="" style="color:white">скачать google chrome</a>
</div>';
$b = '<img src="https://www.cyberforum.ru/images/code404a4.jpg" style="margin:0 auto 120px auto;display:block;">';
exit($g . $b);
}
Меня больше всего интересует как сделать чтобы например для браузеров Opera старыми версиями которые меньше последней версии блокировались сайты?
Вы видете условие что если $_SERVER['HTTP_USER_AGENT'] == версии 10.10 то заблокировать сайт.Как можно идеально осуществить такую задумку ведь если брать разные браузеры Opera
и вывести их на экран echo $_SERVER['HTTP_USER_AGENT'] то там различные символы и для условия никак не подходят ведь я хотел сделать в условие
подставку переменной в которой содержалась бы запись версии,примерно так:
PHP
1
2
3
4
5
6
7
if($_SERVER['HTTP_USER_AGENT'] == 'Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.2.15 Version/9.01'){
$d = 9.01;
}
if($_SERVER['HTTP_USER_AGENT'] == 'Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.2.15 Version/8.02'){
$d = 8.02;
}
if($_SERVER['HTTP_USER_AGENT'] == 'Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.2.15'.$d)
Как тут быть в этом деле?или есть какие то ячейки у суперглобального массива $_SERVER['HTTP_USER_AGENT'] отвечающего за версию браузеров?

Добавлено через 8 минут
Скачал старые браузеры и у некоторых естественно в этом Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.2.15 Version/9.01 разные символы не подходящие под условие например вместо ru записано en итд
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.02.2018, 14:53
Ответы с готовыми решениями:

Не удается подключить NotificationCompat для старых версий
Всем привет! Такая проблема: не удается подключить NotificationCompat для старых версий. Ругается...

Совместимость скриптов для новых и старых версий
У меня только один вопрос. Сейчас появились новые версии Internet Explorer'а и появился Netscape6.2...

Где скачать плагин для jquery вывод сообщения для старых браузеров?
Добрый день! Подскажите плагин jquery для распознавания браузера и вывод сообщения об обновлении...

Как вставить атрибут multiple для ранних версий браузеров?
Делаю загрузчик файлов. В форме добавляю &lt;input type=&quot;file&quot; multiple&gt; К сожалению, в спецификаци...

5
14 / 60 / 21
Регистрация: 15.06.2017
Сообщений: 572
19.02.2018, 16:09 2
Сколько посетителей вашего сайта использует оперу 11-го года? оба? или только один? ради двух чудаков, которые интернет в гробу видали огород городить?
0
-4 / -2 / 1
Регистрация: 22.07.2017
Сообщений: 143
19.02.2018, 16:38  [ТС] 3
otto-fukin, нет ну всё же это необходимо.как это реализовать или есть кое какие функции или ячейки $_SERVER['HTTP_USER_AGENT'] на проверку версий чтобы потом сделать условие если version < 10.10 то те что меньше прикрыть,заблокировать показ сайта в этих браузерах
0
569 / 426 / 153
Регистрация: 26.05.2016
Сообщений: 2,380
19.02.2018, 16:46 4
Цитата Сообщение от otto-fukin Посмотреть сообщение
Сколько посетителей вашего сайта использует оперу 11-го года? оба? или только один? ради двух чудаков, которые интернет в гробу видали огород городить?
Во-во, ещё про IE 6.0 вспомнить
0
22 / 22 / 8
Регистрация: 21.07.2017
Сообщений: 74
19.02.2018, 18:48 5
как уже написали, не стоит заморачиваться ради 0.00001% посетителей на старых конях.

Однако если из спортивного интереса, используйте конструкцию switch, в которой отлавливайте все неугодные версии по одной.
0
458 / 366 / 94
Регистрация: 01.05.2010
Сообщений: 1,752
20.02.2018, 12:15 6
есть у меня такой костыль на javascript'e. Когда-то даже подобное было реализовано в jQuery, но его оттуда вырезали, видимо не спроста. В общем, вот мое решение на js:
Javascript
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
69
70
71
72
73
74
75
76
77
78
79
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
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
/** 
* Определитель браузера и его версии.
* Создает объект Browser, который можно использовать для этой цели.
* Также может назначить выбранному элементу классы с метками имени браузера и версии.
* 
* Не используйте свойства объекта для проверки имени и версии браузера! Используйте только следующие методы:
*   Browser.get_name()              - возвращает имя браузера.
*   Browser.get_version(if_short)   - возвращает версию браузера. Если передан параметр if_short - возвращает
*                                   короткую версию браузера.
*   Browser.mark_element(jQuery_object, jQuery_element)     - Назначает элементу, селектор которого передан во
*                                   втором параметре, три класса - с именем браузера, с версией, и с короткой
*                                   версией. Первым аргументом нужно передать объект jQuery. Если вы не подклю-
*                                   чите библиотеку jQuery к вашему проекту - то использовать данный метод у
*                                   вас не получится.
* 
* Зависимости:
*                   jQuery - только, если вы хотите использовать метод Browser.mark_element(). Остальные методы
*                           нативны.
* 
* Changelog:
*   0.1 - Created
*   0.2 - Added Microsoft Edge support
* 
* Version:  0.2
* Date:     2017-09-18
* Author:   Halkovsky Pavel
*/
var Browser = {
    name: '',
    version: '',
    short_version: '',
    user_agent: '',
    
    /** 
    * Возвращает имя браузера.
    * 
    * return    string
    */
    get_name: function() {
        if (this.name == '') {
            this.user_agent = navigator.userAgent;
            if (this.user_agent.indexOf('Edge') >= 0) {
                this.name = "Microsoft Edge";
            } else if (this.user_agent.indexOf('MSIE') >= 0 || this.user_agent.indexOf('Trident/') >= 0) {
                this.name = 'Microsoft Internet Explorer';
            } else if (this.user_agent.indexOf('Mozilla') >= 0 && this.user_agent.indexOf('Firefox') >= 0) {
                this.name = 'Mozilla Firefox';
            } else if (this.user_agent.indexOf('Chrome') >= 0) {
                this.name = 'Google Chrome';
            } else if (this.user_agent.indexOf('Chrome') == -1 && this.user_agent.indexOf('Safari') >= 0) {
                this.name = 'Safari';
            } else if (this.user_agent.indexOf('Opera') >= 0) {
                this.name = 'Opera';
            }
        }
        
        return this.name;
    },
    
    /** 
    * Возвращает версию браузера.
    * 
    * param     bool    if_short    - передайте этот аргумент, чтобы получить короткую версию.
    * 
    * return    string              - ели параметр if_short не передан, будет возвращена строка с полной версией.
    * return    int                 - ели параметр if_short передан, будет возвращено целое число, являющейся короткой версией.
    */
    get_version: function(if_short) {
        //Если версия уже была получена ранее - просто возвращаем ее.
        if (if_short) {
            if (this.short_version != '') {
                return this.short_version;
            }
        } else {
            if (this.version != '') {
                return this.version;
            }
        }
        
        //Если имя браузера еще не было получено - получаем его.
        if (this.name == '' || this.user_agent == '') {
            this.name = this.get_name();
        }
        
        //Шаблоны для поиска.
        var pattern1 = '';
        var pattern2 = '';
        
        //Версии браузера - полная и короткая.
        this.version = '?';
        this.short_version = '?';
        
        //Определяем версии.
        if (this.name == 'Microsoft Edge') {
            pattern1 = /Edge\/(.*)/;
            pattern2 = /\d+/;
            //console.log(this.user_agent.match(pattern1));
            this.version = this.user_agent.match(pattern1)[1];
            this.short_version = this.version.match(pattern2);
        } else if (this.name == 'Google Chrome') {
            pattern1 = /Chrome\/(.*?)\s/;
            pattern2 = /\d+/;
            this.version = this.user_agent.match(pattern1)[1];
            this.short_version = this.version.match(pattern2);
        } else if (this.name == 'Mozilla Firefox') {
            pattern1 = /Firefox\/(.*)/;
            pattern2 = /\d+/;
            this.version = this.user_agent.match(pattern1)[1];
            this.short_version = this.version.match(pattern2);
        } else if (this.name == 'Microsoft Internet Explorer') {
            //ИЕ, начиная с 11й версии удалил метку MSIE с информации о себе.
            if (this.user_agent.indexOf('MSIE') >= 0) {
                pattern1 = /MSIE\s(.*?);/;
                pattern2 = /\d+/;
                this.version = this.user_agent.match(pattern1)[1];
                this.short_version = this.version.match(pattern2);
            } else if (this.user_agent.indexOf('MSIE') == -1 && this.user_agent.indexOf('Trident/7') >= 0) {
                this.version = 11;
                this.short_version = 11;
            }
        } else if (this.name == 'Safari') {
            pattern1 = /Version\/(.*?)\s/;
            pattern2 = /\d+/;
            this.version = this.user_agent.match(pattern1)[1];
            this.short_version = this.version.match(pattern2);
        } else if (this.name == 'Opera') {
            pattern1 = /Version\/(.*)/;
            pattern2 = /\d+/;
            this.version = this.user_agent.match(pattern1)[1];
            this.short_version = this.version.match(pattern2);
        }
        
        //Короткую версию преобразовываем в число. Это намного удобнее использовать сравнений.
        if (this.short_version != '?') {
            this.short_version = Number(this.short_version);
        }
        
        /*console.log('User Agent: ' + this.user_agent);
        console.log('Browser: ' + this.name);
        console.log('Version: ' + this.version);
        console.log('Short Version: ' + this.short_version);*/
        
        /*alert('User Agent: ' + this.user_agent);
        alert('Browser: ' + this.name);
        alert('Version: ' + this.version);
        alert('Short Version: ' + this.short_version);*/
        
        //Какую версию вернем?
        if (if_short) {
            return this.short_version;
        }
        return this.version;
    },
    
    /** 
    * Задает элементу классы с данными о имени и версии браузера.
    * 
    * param     jQuery  jQuery_object       - объект jQuery. Он будет использован для назначения элементу классов.
    *                                       Подключите сначала библиотеку jQuery, если хотите использовать этот метод.
    * param     string  jQuery_element      - селектор объекта, которай будет передан объекту jQuery.
    * 
    * return    bool                        - успех или неудача.
    */
    mark_element: function(jQuery_object, jQuery_element) {
        //Получаем данные и формируем классы.
        var name = this.get_name().split(' ').join('-').toLowerCase();
        var version = (name + '-' + this.get_version()).split(' ').join('-').toLowerCase();
        var short_version = (name + '-' + this.get_version(true).toString()).split(' ').join('-').toLowerCase();
        
        //Назначаем классы элементу.
        if (!jQuery_object(jQuery_element).hasClass(name)) {
            jQuery_object(jQuery_element).addClass(name);
        }
        if (!jQuery_object(jQuery_element).hasClass(short_version)) {
            jQuery_object(jQuery_element).addClass(short_version);
        }
        if (!jQuery_object(jQuery_element).hasClass(version)) {
            jQuery_object(jQuery_element).addClass(version);
        }
        
        //Если классы не назначились - возвращаем неудачу.
        if (!jQuery_object(jQuery_element).hasClass(name)) {
            return false;
        }
        if (!jQuery_object(jQuery_element).hasClass(short_version)) {
            return false;
        }
        if (!jQuery_object(jQuery_element).hasClass(version)) {
            return false;
        }
        
        //Если все ок - возвращаем удачу.
        return true;
    }
}
 
Browser.get_name();
Browser.get_version();
Ну а далее просто:
Javascript
1
2
3
if (Browser.get_name() == 'Opera' && Browser.get_version(true) < 10) {
    //...
}
Если уж надо проанализировать подверсию, то берете Browser.get_version() и анализируете.
IE c 6 по 11 определяет. Остальные браузеры тоже. Но не уверен на счет древних. Да и с выходом новых версий тоже могут быть проблемы, так что на свой страх и риск

Добавлено через 3 минуты
Естественно, работает корректно только с самыми распространенными браузерами. Писал, когда-то давно, в последнее время добавил только поддержку Edge.

Добавлено через 1 минуту
Опасность в том, что другие нераспространенные браузеры может определить совсем не правильно. Так что это костыль.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.02.2018, 12:15

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Фиксированное меню для старых браузеров "safari"
Здравствуйте, перехожу сразу к проблеме, делаю фиксированное меню для экранов 800 пикселей и...

Некорректная печать старых версий шрифтов
С некоторого момента при печати из ворда (или тестовой странички принтера) текстов с использованием...

Запретить запуск отдельных программ, старых версий
Требуется запретить использование старых версий некоторых программ. Почти все они в варианте...

Перевод программ старых версий Delphi в новые
Как перевести программу, написанную на Delphi5.0 в Delphi 7.0 или в Delphi 2009. Имеется ли...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.