YUI on IE8: Argument not valid on dom-style.js

2019-02-28 02:37发布

问题:

I have asked this everywhere but still not getting any feedback and is getting me crazy. We are using some Alloy UI widgets on the portal im working with (Liferay 6.2) and everything works fine in all the browsers but IE8. For some reason im getting an error message regarding an invalid argument in one of the YUI core files functions regarding setStyle (what you use to add styles to a node in YUI). I have realized that IE8 is not happy with this (here's the whole YUI function) :

setStyle: function(node, att, val, style) {
    style = style || node.style;
    var CUSTOM_STYLES = Y_DOM.CUSTOM_STYLES;

    if (style) {
        if (val === null || val === '') { // normalize unsetting
            val = '';
        } else if (!isNaN(new Number(val)) && re_unit.test(att)) { // number values may need a unit
            val += Y_DOM.DEFAULT_UNIT;
        }

        if (att in CUSTOM_STYLES) {
            if (CUSTOM_STYLES[att].set) {
                CUSTOM_STYLES[att].set(node, val, style);
                return; // NOTE: return
            } else if (typeof CUSTOM_STYLES[att] === 'string') {
                att = CUSTOM_STYLES[att];
            }
        } else if (att === '') { // unset inline styles
            att = 'cssText';
            val = '';
        }
        style[att] = val;

What is causing IE8 to report the error is this line:

style[att] = val;

apparently because of

val =' '; 

What i don't understand is why the other browsers don't have any problem with that declaration and just IE8 complains about it. Since this is part of the dom-style.js which is a core file for YUI in Liferay i really don't want to mess with that code. I will REALLY appreciate any help since i have been dealing with this for the whole week and still can't get a solution and / or information on the www about a similar issue.

回答1:

Ok this is WAY more simple than i thought. For some reason all the modern browsers (including IE9) don't have any problems when you initialize Alloy UI with :

YUI({ lang: 'ca-ES' }).use(
  'aui-node',
  'aui-datatable',
  'aui-pagination',
  'datatype-date',

function(Y) {...

But IE8 (of course) will give you a series of really weird console errors and will make your widgets work bad if you dont use AUI insted of YUI, so that was it i replaced YUI by AUI in all the parts of my code and now is working fine in IE8 too. If somebody can give a proper explanation will be really appreciated since is hard for me to understand why IE8 is not ok with using YUI to initialize Alloy UI widgets or use YUI.

Im still doing some research on that but it seems that the reason this is happening is because im using YUI on a .JS file, still have to find a proper explanation tho.