WMS without Projection

Example of two WMS layers using the projection EPSG:21781, which is unknown to the client.

As long as no coordinate transformations are required, OpenLayers works fine with projections that are only configured with a code and units.

<!DOCTYPE html>
<html>
  <head>
    <title>WMS without Projection</title>
    <link rel="stylesheet" href="https://openlayers.org/en/v4.6.4/css/ol.css" type="text/css">
    <!-- The line below is only needed for old environments like Internet Explorer and Android 4.x -->
    <script src=""></script>
    <script src="https://openlayers.org/en/v4.6.4/build/ol.js"></script>
  </head>
  <body>
    <div id="map" class="map"></div>
    <script>
      var layers = [
        new ol.layer.Tile({
          source: new ol.source.TileWMS({
            attributions: '© <a href="http://www.geo.admin.ch/internet/geoportal/' +
                'en/home.html">Pixelmap 1:1000000 / geo.admin.ch</a>',
            crossOrigin: 'anonymous',
            params: {
              'LAYERS': 'ch.swisstopo.pixelkarte-farbe-pk1000.noscale',
              'FORMAT': 'image/jpeg'
            },
            url: 'https://wms.geo.admin.ch/'
          })
        }),
        new ol.layer.Image({
          source: new ol.source.ImageWMS({
            attributions: '© <a href="http://www.geo.admin.ch/internet/geoportal/' +
                'en/home.html">National parks / geo.admin.ch</a>',
            crossOrigin: 'anonymous',
            params: {'LAYERS': 'ch.bafu.schutzgebiete-paerke_nationaler_bedeutung'},
            serverType: 'mapserver',
            url: 'https://wms.geo.admin.ch/'
          })
        })
      ];

      // A minimal projection object is configured with only the SRS code and the map
      // units. No client-side coordinate transforms are possible with such a
      // projection object. Requesting tiles only needs the code together with a
      // tile grid of Cartesian coordinates; it does not matter how those
      // coordinates relate to latitude or longitude.
      var projection = new ol.proj.Projection({
        code: 'EPSG:21781',
        units: 'm'
      });

      var map = new ol.Map({
        layers: layers,
        target: 'map',
        view: new ol.View({
          center: [660000, 190000],
          projection: projection,
          zoom: 9
        })
      });
    </script>
  </body>
</html>