Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MouseEvent not working in Internet Explorer

Is it me? Is it my IE? or why is this code not working on IE 11:

var clicker = new MouseEvent("click", {
  'bubbles': true,
  'cancelable': true,
  'view': window,
  'detail': 0,
  'screenX': 0,
  'screenY': 0,
  'clientX': 0,
  'clientY': 0,
  'ctrlKey': false,
  'altKey': false,
  'shiftKey': false,
  'metaKey': false,
  'button': 0,
  'relatedTarget': null
});

I get "Object doesn't support this action" on the console (F12). I had to come up with a workaround, but I just don't get why is the previous code not working (by the way, the previous code comes from here: https://msdn.microsoft.com/en-us/library/ie/dn905219(v=vs.85).aspx (Creating and firing synthetic events). Workaround:

if (typeof MouseEvent !== 'function') {
    (function (){
        var _MouseEvent = window.MouseEvent;
        window.MouseEvent = function (type, dict){
            dict = dict || {};
            var event = document.createEvent('MouseEvents');
            event.initMouseEvent(
                    type,
                    (typeof dict.bubbles == 'undefined') ? true : !!dict.bubbles,
                    (typeof dict.cancelable == 'undefined') ? false : !!dict.cancelable,
                    dict.view || window,
                    dict.detail | 0,
                    dict.screenX | 0,
                    dict.screenY | 0,
                    dict.clientX | 0,
                    dict.clientY | 0,
                    !!dict.ctrlKey,
                    !!dict.altKey,
                    !!dict.shiftKey,
                    !!dict.metaKey,
                    dict.button | 0,
                    dict.relatedTarget || null
            );
            return event;
        }
    })();
}

The deal is that I want to migrate the deprecated createEvent/initXXXXEvent to the new form (var event = new XXXXEvent(...) ) whenever possible and not rely on the deprecated methods.

like image 707
Charlie Affumigato Avatar asked Mar 02 '15 17:03

Charlie Affumigato


2 Answers

The MSDN documentation from the link you provided indicates that the new syntax for the DOM L4 event constructor pattern:

Applies to Internet Explorer for Windows 10 Technical Preview and later.

which is a different version of IE from what you are using. So it's expected that IE11 does not support this feature

like image 146
securecodeninja Avatar answered Oct 12 '22 16:10

securecodeninja


There is a polyfill to make it work in IE.

Except that the try catch block in that code needs to look like this:

try {
  new CustomEvent('test');
  return false; // No need to polyfill
} catch (e) {
  // Need to polyfill - fall through
}

I submitted this correction to their website.

like image 36
Dmitry Efimenko Avatar answered Oct 12 '22 16:10

Dmitry Efimenko