[Web] 1 definitie voor zowel <a is="foo-bar"> als <foo-bar>

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • terje7601
  • Registratie: September 2009
  • Laatst online: 08-02-2024
Mijn vraag:

Is het mogelijk om met een enkele definitie:
code:
1
window.customElements.define('foo-bar', ...);

zowel autonomous custom elements (<foo-bar>) als customized built-in elements (<a is="foo-bar">) te kunnen declareren in HTML?

Hieronder probeer ik dit te doen, maar voor de `<foo-bar>` declaratie krijg ik een error op lijn 13:
code:
1
Uncaught TypeError: 'set hash' called on an object that does not implement interface HTMLAnchorElement.

Door de `extends HTMLAnchorElement` zou ik nochtans verwachten dat dit gewoon werkt.

Of ik zou verwachten dat er in `connectedCallback()` een manier is om te bepalen van welke vorm de declaratie is? Dan zou ik in het geval van `<foo-bar>` zelf een `document.createElement('a')` kunnen doen om het anchor element toe te voegen aan de shadow DOM.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE html>

<a is="foo-bar" href="https://tweakers.net"></a>
<foo-bar href="https://tweakers.net"></foo-bar>

<script>
    class Bar extends HTMLAnchorElement {
        constructor() {
            super();
        }

        connectedCallback() {
            this.hash = '#bar';
            if (!this.textContent) {
                this.textContent = 'bla';
            }
        }

    }

    window.customElements.define('foo-bar', Bar, { extends: 'a' });
</script>


Relevante software en hardware die ik gebruik:

Firefox

Wat ik al gevonden of geprobeerd heb:

De MDN documentatie over custom elements:
https://developer.mozilla...nts/Using_custom_elements
Daarin staan voorbeelden van zowel "autonomous custom elements" als "customized built-in elements", maar niet van een enkele definitie waarmee je beide kan gebruiken.

[ Voor 0% gewijzigd door terje7601 op 06-02-2024 13:54 . Reden: typo ]

Beste antwoord (via terje7601 op 08-02-2024 12:59)


  • Danny Engelman
  • Registratie: Februari 2024
  • Laatst online: 07-02-2024
Autonomous en Customized Built-In (CBI) zijn 2 verschillende technieken, en CBI is nooit echt uitontwikkeld door de WHATWG partners.
Als je voorbij de blog voorbeelden gaat is de implementatie tussen Chromium en Firefox verschillend,
en Apple zegt al sinds het begin dat ze CBI niet gaan implementeren in Safari, vanwege het Liskov-principle (als je diep in OOP wilt duiken, en ja Apple heeft gelijk IMHO)
Er is een polyfill voor Safari.
Maar geen enkele developer zet zijn kaarten op CBI
Nog regelmatig protesteren nieuwe developers (zeer onaardig) verbaal richting Apple.
Maar zolang Ryosuke Niwa daar in het Apple team zit zal er weinig veranderen.

Dus advies:Blijf bij Autonomous Elements en extend alleen van HTMLElement

Noot: Op StackOverflow krijg je meer antwoorden op Web Components vragen dan hier

[ Voor 9% gewijzigd door Danny Engelman op 07-02-2024 19:58 ]

Alle reacties


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • Danny Engelman
  • Registratie: Februari 2024
  • Laatst online: 07-02-2024
Autonomous en Customized Built-In (CBI) zijn 2 verschillende technieken, en CBI is nooit echt uitontwikkeld door de WHATWG partners.
Als je voorbij de blog voorbeelden gaat is de implementatie tussen Chromium en Firefox verschillend,
en Apple zegt al sinds het begin dat ze CBI niet gaan implementeren in Safari, vanwege het Liskov-principle (als je diep in OOP wilt duiken, en ja Apple heeft gelijk IMHO)
Er is een polyfill voor Safari.
Maar geen enkele developer zet zijn kaarten op CBI
Nog regelmatig protesteren nieuwe developers (zeer onaardig) verbaal richting Apple.
Maar zolang Ryosuke Niwa daar in het Apple team zit zal er weinig veranderen.

Dus advies:Blijf bij Autonomous Elements en extend alleen van HTMLElement

Noot: Op StackOverflow krijg je meer antwoorden op Web Components vragen dan hier

[ Voor 9% gewijzigd door Danny Engelman op 07-02-2024 19:58 ]


Acties:
  • 0 Henk 'm!

  • terje7601
  • Registratie: September 2009
  • Laatst online: 08-02-2024
Hartelijk bedankt voor de opheldering en het advies. Voor toekomstige lezers: zie ook https://stackoverflow.com...p-and-safari-ios#72090672