В конечном счете, я пытаюсь создать особенно надежный способ, настроенный на моем сервере, для обнаружения имени и версии браузера кого-то (для ведения журнала, а не для включения функций), и кто-то указал на этот проект . При этом они используют файл htaccess со следующим содержимым:
AddType application/x-httpd-php .js
Их файл readme сказал, что это должно заставить сервер также использовать PHP для синтаксического анализа определенного js-файла, а если htaccess не включен, вы должны найти обход.
Я использую IIS 7, который использует файлы web.config, но я не вижу готового типа mime для PHP в Интернете, поэтому делать что-то вроде этого не похоже, что он будет работать :
<configuration> <system.webServer> <staticContent> <mimeMap fileExtension=".js" mimeType="PHP mime type" /> </staticContent> </system.webServer> </configuration>
Я попытался использовать это предложение , которое включало добавление сопоставлений обработчиков через графический интерфейс IIS, но это, похоже, не повлияло на него. Как это может быть сделано?
Я получил эту работу, добавив отображение обработчика в IIS. Все, что я сделал, это добавить сопоставление обработчика с detect.js
Request path
установленным в detect.js
с помощью FastCgiModule
и, очевидно, направляя исполняемый путь туда, где php-cgi.exe
находится на моем сервере. Затем php разбирал detect.js в порядке, единственная проблема, с которой я столкнулся, пытаясь заставить это работать, заключалась в том, что код, создавший объект WhichBrowser
, выполнялся до того, detect.js
скрипт detect.js
был добавлен / загружен на данную тестовую веб-страницу. Чтобы исправить это, я просто изменил приведенный здесь код:
<script> (function(){var p=[],w=window,d=document,e=f=0;p.push('ua='+encodeURIComponent(navigator.userAgent));e|=w.ActiveXObject?1:0;e|=w.opera?2:0;e|=w.chrome?4:0; e|='getBoxObjectFor' in d || 'mozInnerScreenX' in w?8:0;e|=('WebKitCSSMatrix' in w||'WebKitPoint' in w||'webkitStorageInfo' in w||'webkitURL' in w)?16:0; e|=(e&16&&({}.toString).toString().indexOf("\n")===-1)?32:0;p.push('e='+e);f|='sandbox' in d.createElement('iframe')?1:0;f|='WebSocket' in w?2:0; f|=w.Worker?4:0;f|=w.applicationCache?8:0;f|=w.history && history.pushState?16:0;f|=d.documentElement.webkitRequestFullScreen?32:0;f|='FileReader' in w?64:0; p.push('f='+f);p.push('r='+Math.random().toString(36).substring(7));p.push('w='+screen.width);p.push('h='+screen.height);var s=d.createElement('script'); s.src='http://intranet.zachs/media/whichbrowser/detect.js?' + p.join('&'); s.onreadystatechange= function () { if (this.readyState == 'complete') go(); } s.onload= go; s.type="text/javascript"; d.getElementsByTagName('head')[0].appendChild(s); })();
Тогда в моей функции go
я просто:
Browsers = new WhichBrowser(); alert("Browser Info: " + Browsers);
Миметики для PHP:
Где «application / php» является наиболее распространенным я видел.
XML-код Web.config, похоже, отлично работает при использовании «application / php», но вы также можете создавать сопоставление mimetype с помощью диспетчера IIS (см. http://technet.microsoft.com/nl-nl/library/ cc725608 (v = ws.10) .aspx ).