Ich habe in den letzten Monaten an genau diesem Problem gearbeitet.
Unterm Strich ein polyfill ist, die^immergrün auf Browsern funktioniert hier https://github.com/Polymer/ShadowDOM
^polyfilling von CSS-Funktionen wie @host noch nicht dort sind, werden bald
Also, ja, es ist ein harte Sache, Polyfill, speziell weil wir sekundäre DOM Bäume erfinden müssen. Wir haben versucht, es so benutzerfreundlich wie möglich zu machen, was eine ziemlich invasive Wrapper-Technik erforderte.
Mit anderen Worten, wenn Sie div = document.createElement('div')
, erhalten Sie eine Sache, die wie ein DIV aussieht und funktioniert wie ein DIV, ist aber eigentlich ein Wrapper-Objekt. Das ultimative Ziel ist natürlich, dass Ihr Code gleich aussieht, egal ob er unter dem Polyfill oder unter einer nativen Implementierung läuft.
Es ist nicht 100% kugelsicher, insbesondere ist es uns nicht möglich, document
für Sie zu wickeln, so dass Sie tun, dass Sie sich, a la:
wrap(document).querySelector(...)
Anders als die document
Ausgabe, die Wrapper beabsichtigt, transparent zu arbeiten. Das ist alles brandneu, also entschuldige ich mich für den Mangel an Dokumenten. Daran arbeiten wir gerade.
Bitte file issues Wenn Sie Fragen oder Probleme haben, wir lieben es, Feedback zu bekommen. Es gibt auch einen E-Mail-Kanal zur Diskussion dieses Polyfill (und der anderen Polyfills in dieser Organisation) unter [email protected]
Ich bezweifle das Zeug weit
implementiert
Das stimmt, aber es ist in Chrome dest an.
Ich kann nicht vorstellen, wie dies funktionieren würde, da das Shadow DOM die Browser-interne Benutzeroberfläche freigibt, die bis zu diesem Zeitpunkt nicht verfügbar war. Eine Lösung müsste das Browser-UI-Verhalten von Grund auf vollständig replizieren. –
@Matt Stone - Eine Idee könnte sein, CSS-dom-dom-Elemente zu verstecken, die Teil des shadow dom sind, und die Javascript-DOM-Abfragefunktionen (zum Beispiel getElementById) so anzupassen, dass sie keine versteckten DOM-Elemente zurückgeben. Natürlich gibt es viel mehr als das und ein Polyfill hätte natürlich Grenzen. –
@ PatriciaBrothers - es könnte möglicherweise mit Hilfe von Dokumentfragmenten emuliert werden, oder indem die Schattenkomponenten aus dem DOM entfernt und in, sagen wir, ein div gesetzt werden. Ich bezweifle, dass dieses Zeug weit verbreitet ist und daher nicht viel benötigt wird. – RobG