This example shows how to trigger WMS GetFeatureInfo requests on click for a WMS tile layer.
Additionally map.forEachLayerAtPixel is used to change the mouse pointer when hovering a non-transparent pixel on the map.
map.forEachLayerAtPixel
<!DOCTYPE html> <html> <head> <title>WMS GetFeatureInfo example (tile layer)</title> <script src="https://code.jquery.com/jquery-1.11.2.min.js"></script> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css"> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ol3/3.7.0/ol.css" type="text/css"> <script src="https://cdnjs.cloudflare.com/ajax/libs/ol3/3.7.0/ol.js"></script> </head> <body> <div class="container-fluid"> <div class="row-fluid"> <div class="span12"> <div id="map" class="map"></div> <div class="span4 offset4 pull-right"> <div id="info" class="alert alert-success"> </div> </div> </div> </div> </div> <script> var wmsSource = new ol.source.TileWMS({ url: 'http://demo.boundlessgeo.com/geoserver/wms', params: {'LAYERS': 'ne:ne'}, serverType: 'geoserver', crossOrigin: '' }); var wmsLayer = new ol.layer.Tile({ source: wmsSource }); var view = new ol.View({ center: [0, 0], zoom: 1 }); var map = new ol.Map({ layers: [wmsLayer], target: 'map', view: view }); map.on('singleclick', function(evt) { document.getElementById('info').innerHTML = ''; var viewResolution = /** @type {number} */ (view.getResolution()); var url = wmsSource.getGetFeatureInfoUrl( evt.coordinate, viewResolution, 'EPSG:3857', {'INFO_FORMAT': 'text/html'}); if (url) { document.getElementById('info').innerHTML = '<iframe seamless src="' + url + '"></iframe>'; } }); map.on('pointermove', function(evt) { if (evt.dragging) { return; } var pixel = map.getEventPixel(evt.originalEvent); var hit = map.forEachLayerAtPixel(pixel, function(layer) { return true; }); map.getTargetElement().style.cursor = hit ? 'pointer' : ''; }); </script> </body> </html>