Uploaded image for project: 'Apache Cordova'
  1. Apache Cordova
  2. CB-12105

window.device.model returns "Chrome" instead of "Edge" when using MS Edge

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Critical
    • Resolution: Fixed
    • Affects Version/s: 6.3.2
    • Fix Version/s: None
    • Component/s: cordova-plugin-device
    • Labels:
      None

      Description

      When building for platform browser the cordova-plugin-device (v1.3.2) returns "Chrome" instead of "Edge" when requesting window.device.model on an Edge browser.

      In the DeviceProxy.js the following code is there: https://github.com/apache/cordova-plugin-device/blob/master/src/browser/DeviceProxy.js#L40

      function getBrowserInfo(getModel) {
          var userAgent = navigator.userAgent;
          var returnVal = '';
          var offset;
      
          if ((offset = userAgent.indexOf('Chrome')) !== -1) {
              returnVal = (getModel) ? 'Chrome' : userAgent.substring(offset + 7);
          } else if ((offset = userAgent.indexOf('Safari')) !== -1) {
              if (getModel) {
                  returnVal = 'Safari';
              } else {
                  returnVal = userAgent.substring(offset + 7);
      
                  if ((offset = userAgent.indexOf('Version')) !== -1) {
                      returnVal = userAgent.substring(offset + 8);
                  }
              }
          } else if ((offset = userAgent.indexOf('Firefox')) !== -1) {
              returnVal = (getModel) ? 'Firefox' : userAgent.substring(offset + 8);
          } else if ((offset = userAgent.indexOf('MSIE')) !== -1) {
              returnVal = (getModel) ? 'MSIE' : userAgent.substring(offset + 5);
          } else if ((offset = userAgent.indexOf('Trident')) !== -1) {
              returnVal = (getModel) ? 'MSIE' : '11';
          }
      
          if ((offset = returnVal.indexOf(';')) !== -1 || (offset = returnVal.indexOf(' ')) !== -1) {
              returnVal = returnVal.substring(0, offset);
          }
      
          return returnVal;
      }
      

      The code above returns model Chrome as soon as it is in the userAgent string. MS Edge provides the following userAgent string: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393

      So it seems we should be checking first if "Edge" is part of the userAgent. If so the browser would be Edge.

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                alsorokin Alexander Sorokin
                Reporter:
                markdark81 Mark Veenstra
              • Votes:
                0 Vote for this issue
                Watchers:
                3 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: