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

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

VotersWatch issueWatchersLinkUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Critical
    • Resolution: Fixed
    • 6.3.2
    • None
    • cordova-plugin-device
    • 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

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

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

            Dates

              Created:
              Updated:
              Resolved:

              Slack

                Issue deployment