diff --git a/examples/browser.html b/examples/browser.html
new file mode 100644
index 0000000000..709af02ddd
--- /dev/null
+++ b/examples/browser.html
@@ -0,0 +1,99 @@
+
+
+
+
+
+ OpenLayers Browser Detection
+
+
+
+
+
+
+
+Browser detection
+
+
+ The goal of this script is to inform about the capacity of the browser used by the user.
+
+
+
+Your browser information
+
+
+
+
+
+
diff --git a/examples/browser.js b/examples/browser.js
new file mode 100644
index 0000000000..d2a9257173
--- /dev/null
+++ b/examples/browser.js
@@ -0,0 +1,52 @@
+var isEventSupported = (function(undef) {
+
+ var TAGNAMES = {
+ 'select':'input',
+ 'change':'input',
+ 'submit':'form',
+ 'reset':'form',
+ 'error':'img',
+ 'load':'img',
+ 'abort':'img'
+ };
+
+ function isEventSupported(eventName, element) {
+ element = element || document.createElement(TAGNAMES[eventName] || 'div');
+ eventName = 'on' + eventName;
+
+ var isSupported = (eventName in element);
+
+ if (!isSupported) {
+ // if it has no `setAttribute` (i.e. doesn't implement Node interface), try generic element
+ if (!element.setAttribute) {
+ element = document.createElement('div');
+ }
+ if (element.setAttribute && element.removeAttribute) {
+ element.setAttribute(eventName, '');
+ isSupported = typeof element[eventName] == 'function';
+
+ // if property was created, "remove it" (by setting value to `undefined`)
+ if (typeof element[eventName] != 'undefined') {
+ element[eventName] = undef;
+ }
+ element.removeAttribute(eventName);
+ }
+ }
+
+ element = null;
+ return isSupported;
+ }
+
+ return isEventSupported;
+})();
+
+function divResult(category, name, element, div) {
+ div.innerHTML = div.innerHTML + category + " " + name + ": ";
+ div.innerHTML = div.innerHTML + (
+ isEventSupported(name, element)
+ ? 'true'
+ : 'false'
+ );
+ div.innerHTML = div.innerHTML + "
";
+}
+