3

I have ASP.NET MVC 4 application and I have trouble with detection of browser on server side. Client with Opera userAgent "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.104 Safari/537.36 OPR/25.0.1614.63" send request, but on server side browser name defined as "Chrome" and it's wrong.

var browserName = Request.Browser.Browser;

I want browserName defined as "Opera". I've tried to override creation of object Request.Browser.


Solution 1:

I've created "browserCaps.config" file and added xml element for Opera into this file.

<browserCaps>
  <use var="HTTP_USER_AGENT" />
      ...
      <case match="Chrome/\d+\.\d+\.\d+.\d+\sSafari/\d+\.\d+\sOPR/(?'version'(?'major'\d+)(?'minor'\.\d+)\.\d+.\d+)">
        browser=Opera
        version=${version}
        majorversion=${major}
        minorversion=${minor}
      </case>
      ...
</browserCaps>

It works fine but I don't like this solution because it overrides the capabilities of all browsers and I need to update it manually.


Solution 2:

I've added a file "opera.browser" to folder "App_Browsers":

<browsers>
   <browser id="Opera" parentID="Chrome">
      <identification>
         <userAgent match="OPR/(?'version'(?'major'\d+)(\.(?'minor'\d+)?)\w*)" />
      </identification>

      <capabilities>
         <capability name="browser" value="Opera" />
         <capability name="majorversion" value="${major}" />
         <capability name="minorversion" value="${minor}" />
         <capability name="type" value="Opera${major}" />
         <capability name="version" value="${version}" />
      </capabilities>
   </browser>
</browsers>

I sent first request from Opera userAgent, it worked out and browserName defined as "Opera", but then I sent second request from Chrome userAgent and browserName still defined as "Opera". What am I doing wrong?

1 Answers1

0

If you need to identify browser for their capabilities only, then you will not make a mistake if the application identifies Opera browser as Chrome one.

Opera has completely switched their rendering engine with WebKit last year, so it really does not make any difference weather you serve the content to Chrome or Opera or any other WebKit-powered browser.

ljubomir
  • 1,495
  • 1
  • 21
  • 40