Comments (5)
the TL;DR answer is: it's a feature, not a bug.
The reason MutationObserver
is used is because it's faster and it scales more when you change many things at once. It's the requestAnimationFrame
equivalent for attribute changes and I believe even the native implementation works in a similar way behind the scene.
You don't want to change in a blocking/synchronous way attributes because that won't perform any good for bigger projects. Each little attribute change might trigger synchronous behaviors in all subnodes of a custom elements too or vice versa.
It's like changing the window size on resize event, you don't know when that blocking behavior would stop. Having that batched and optimized natively is a great thing.
Now, I understand the createdCallback gotcha and I've provided a work around for that, but I start believing you really have some problem with asunchronous code in general ... or if you could be so kind to explain me why would you want or need that, I might re-consider this answer.
from document-register-element.
P.S. MutationObserver
like Object.observe
were introduced to exactly avoid synchronous blocking changes, even to regular Objects. If I were you, I rather try to figure out how to deal with these scenarios instead of asking everyone and everything to be sync and blocking. Just saying, those APIs are not there to annoy developers but to actually help them.
from document-register-element.
TL;DR: I just want to have a real consistent cross-browser behavior.
If I would override the setAttribute
method as you do in one of your examples, I would get this behavior out of the box. The only use-case I would not support would be the manipulation through the web-inspector in the developer's browser.
from document-register-element.
You have a consistent behavior, you define what should happen in the CustomElement prototype and events definition and you got it. That is what this polyfill is about, an API that works across platform consistently and it does ... so that's the good news.
The bad one is, you are apparently doing things that won't even work on Polymer since it uses same MutationObserver
behavior because that's what you want to do as well but you don't know it yet ;-)
from document-register-element.
btw, you didn't give me a single valid use case for this request, so I am going to close this. Feel free to change my mind with real needs and please do not mention your testing frameworks, thank you for your understanding.
from document-register-element.
Related Issues (20)
- LifeCycle events order of nested custom elements inconsistent across Chrome and Firefox HOT 18
- Built-in elements don't work in Firefox HOT 6
- TypeError: new.target does not define a custom element HOT 3
- document.registerElement is deprecated and will be removed in M73 HOT 3
- Post-install script slowness HOT 3
- appreciate your feedback for custom element diagram HOT 8
- [Uncaught DOMException: Failed to execute 'registerElement' on 'Document'] when used in Chrome Extension HOT 16
- Functions are not evaluated in connectedCallback HOT 1
- `this` reference in contructor broken HOT 14
- Multiple instances of the polyfill leads to unexpected behaviour HOT 1
- error ""Failed to construct 'HTMLElement': Please use the 'new' operator"" when using with Angular/elements 8.2.0 HOT 2
- Refreshing a document inside an iframe which loads d-r-e breaks the polyfill and leaves document.createElement as undefined HOT 15
- `attributeChangedCallback()` bound value is invalid HOT 15
- Add DRE to Polyfill.io service HOT 1
- [QUESTION] Unable to get property '_isMounted' of undefiened. HOT 1
- TypeError - Object doesn't support property or method 'registerElement' HOT 3
- Time to compare again? (webcompents/custom-elements) HOT 2
- Polyfill does not seem to be working in IE 11 HOT 6
- postinstall fails in noexec enviornment HOT 1
- We unable to install latest version @1.14.7 HOT 7
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from document-register-element.