virtual-dom icon indicating copy to clipboard operation
virtual-dom copied to clipboard

Elm uses invalid value in `domNode.insertBefore`

Open malaire opened this issue 6 years ago • 3 comments

This Elm bug is seen when compiling (with --debug and Elm 0.19.1) the default counter-example of Ellie locally, and then running it with IE 10. IE 10 gives error "Invalid argument" at main.js, line 3710, character 5

The error happens on domNode.insertBefore line in following code:

		case 7:
			var data = patch.s;
			var kids = data.e;
			var i = data.v;
			var theEnd = domNode.childNodes[i];
			for (; i < kids.length; i++)
			{
				domNode.insertBefore(_VirtualDom_render(kids[i], patch.u), theEnd);
			}
			return domNode;

Changing that line to following fixes this error:

				domNode.insertBefore(_VirtualDom_render(kids[i], patch.u), theEnd || null);

This confirms that Elm is using invalid value of theEnd, because only valid node or null is allowed there. So this is not a bug in IE 10, but a bug in Elm which is just seen in IE 10.

MDN documentation of insertBefore says:

referenceNode is not an optional parameter -- you must explicitly pass a Node or null. Failing to provide it or passing invalid values may behave differently in different browser versions.

malaire avatar Nov 07 '19 13:11 malaire

Exact files used (just new project with elm init and direct copy from Ellie example). txt extension added as GitHub doesn't allow these otherwise.

elm.json.txt index.html.txt Main.elm.txt

ps. I don't have access to IE 10 for long enough to create better minimal example.

malaire avatar Nov 07 '19 13:11 malaire

Testing with Firefox 68.2.0esr shows that just before the for-loop theEnd is undefined.

(So invalid value of theEnd is not limited to IE 10, it just doesn't cause problems e.g. in Firefox).

malaire avatar Nov 07 '19 14:11 malaire

I'm also running into this issue where some implementations will prepend an element to the childNodes, or just throw an error, when given undefined as a value for the referenceNode.

seanstrom avatar Mar 17 '21 22:03 seanstrom