Google для надежного обнаружения браузера часто приводит к проверке строки агента пользователя. Этот метод не является надежным, так как тривиально обманывать это значение. Я написал метод обнаружения браузеров с помощью duck-typing .
Используйте только метод обнаружения браузера, если это действительно необходимо, например, чтобы показать инструкции для конкретного пользователя для установки расширения , Использовать обнаружение функции, когда это возможно.
Демо: https://jsfiddle.net/311aLtkz/
// Opera 8.0+
var isOpera = (!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
// Firefox 1.0+
var isFirefox = typeof InstallTrigger !== 'undefined';
// Safari 3.0+ "[object HTMLElementConstructor]"
var isSafari = /constructor/i.test(window.HTMLElement) || (function (p) { return p.toString() === "[object SafariRemoteNotification]"; })(!window['safari'] || (typeof safari !== 'undefined' && safari.pushNotification));
// Internet Explorer 6-11
var isIE = /*@cc_on!@*/false || !!document.documentMode;
// Edge 20+
var isEdge = !isIE && !!window.StyleMedia;
// Chrome 1+
var isChrome = !!window.chrome && !!window.chrome.webstore;
// Blink engine detection
var isBlink = (isChrome || isOpera) && !!window.CSS;
предыдущий метод зависел от свойств механизма рендеринга ( -moz-box-sizing
и -webkit-transform
) для обнаружения браузера. Эти префиксы в конечном итоге будут удалены, поэтому, чтобы сделать обнаружение еще более надежным, я переключился на специфические для браузера характеристики:
document.documentMode
. StyleMedia
. Исключение Trident оставляет нас с Edge. InstallTrigger
chrome
содержащий несколько свойств, включая документированный объект chrome.webstore
. SafariRemoteNotification
, который был введен после версии 7.1, чтобы охватить все Safaris от 3.0 и выше. window.opera
существует в течение многих лет, но будет отброшена , когда Opera заменит свой движок Blink + V8 (используется Chromium). Обновление 1: Выпущена Opera 15 , ее строка UA выглядит как Chrome, но с добавлением «OPR». В этой версии определяется chrome
объект (но chrome.webstore
- нет). Так как Opera пытается клонировать Chrome, я использую для этого нюансы агента пользователя. Обновление 2: !!window.opr && opr.addons
можно использовать для обнаружения Opera 20 + (вечнозеленых). CSS.supports()
был введен в Blink , как только Google включил Chrome 28. Это, конечно, тот же Blink, который используется в Opera. Обновлено в ноябре 2016 года, чтобы включить обнаружение браузеров Safari от 9.1.3 и выше
Обновлено в августе 2018 года, чтобы обновить последние успешные тесты на chrome, IE IE Firefox и краю.
blockquote>
Это означает, что $objPage
не экземпляр объекта. Мы можем видеть код, Вы раньше инициализировали переменную?
, Поскольку Вы ожидаете тип конкретного объекта, можно также использовать подсказывающая типу функция PHPs <глоток> Документы глоток> для получения ошибки, когда логика нарушена:
function page_properties(PageAtrributes $objPortal) {
...
$objPage->set_page_title($myrow['title']);
}
Эта функция только примет PageAtrributes
для первого параметра.
Я понял, что не передавал $objPage в page_properties () . Это хорошо работает теперь.