Gunnar Bittersmann: Dokumente überblenden

Beitrag lesen

@@TS

Hat Rolf b dich inzwischen gläubig gemacht?

Er hat mir eine Interpretation deiner einen Aussage (Local Storage) gegeben, die man nachverfolgen kann. Aber so ganz sicher, wie Du as wohl gemeint haben könntest, erschien er mir auch nicht.

Wie das in der Praxis dann aussieht, ist mir trotzdem noch schleierhaft. Wenn ich z. B. ein generelles Stylesheet (das für alle Dokumente der Site gelten soll) im Local Storage halten will, wie würde das aussehen müssen, damit man auch einen Fallback hat?

So in der Art (ungetestet):

<script>
var myStylesheetURL = 'http://example.net/mystylesheet.css';

if (localStorage) // wenn localStorage vom Browser unterstützt wird
{
  if (localStorage.getItem('myStylesheet') // wenn myStylesheet schon im localStorage ist
  {
    // schreibe myStylesheet aus dem localStorage in ein style-Element
    createStyleElement(localStorage.getItem('myStylesheet'));
  }

  else // wenn myStylesheet noch nicht im localStorage ist
  {
    // hole http://example.net/mystylesheet.css per AJAX
    var httpRequest = new XMLHttpRequest();
    httpRequest.open('GET', myStylesheetURL);

    httpRequest.onreadystatechange = function ()
    {
      if (httpRequest.readyState === XMLHttpRequest.DONE)
      {
        if (httpRequest.status === 200)
        {
          // schreibe myStylesheet in localStorage
          localStorage.setItem('myStylesheet', httpRequest.responseText);

          // schreibe myStylesheet in ein style-Element
          createStyleElement(httpRequest.responseText);
        }
        else
        {
          createLinkElement();
        }
      }
    };

    httpRequest.send();
  }
}

else // wenn localStorage vom Browser nicht unterstützt wird
{
  createLinkElement();
}

function createStyleElement(stylesheet)
{
  var styleElement = document.createElement('style');
  styleElement.innerText = stylesheet;
  document.head.appendChild(styleElement);
}

function createLinkElement()
{
  var linkElement = document.createElement('link');
  linkElement.rel = 'stylesheet';
  linkElement.href = myStylesheetURL;
  document.head.appendChild(linkElement);
}
</script>
<noscript>
  <link rel="stylesheet" href="http://example.net/mystylesheet.css"/>
</noscript>

Und was ein Cookie hier zu suchen hat, hast Du leider auch nicht näher ausgeführt.

Nicht „hier“, sondern das ist eine gänzlich andere Art der Implementierung.

Soll da ggf. auch ein Stylesheet reinpassen?

Nein. Der (das?) Cookie muss nur ein Flag sein, das clientseitig gesetzt wird und serverseitig ausgewertet wird (ebenfalls ungetestet):

<?php if (isset($_COOKIE['myStylesheet'])): ?>
  <link rel="stylesheet" href="http://example.net/mystylesheet.css"/>
<?php else: ?>
  <style>
    <?php readfile('mystylesheet.css'); ?>
  </style>
  <script>
    window.onload = function ()
    {
    // hole http://example.net/mystylesheet.css per AJAX
    var httpRequest = new XMLHttpRequest();
    httpRequest.open('GET', 'http://example.net/mystylesheet.css');

    httpRequest.onreadystatechange = function ()
    {
      if (httpRequest.readyState === XMLHttpRequest.DONE)
      {
        if (httpRequest.status === 200)
        {
          // setze Cookie
          document.cookie = 'myStylesheet=true';
        }
      }
    };

    httpRequest.send();
  }
  </script>
<?php endif; ?>

LLAP 🖖

--
“When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
0 62

Dokumente überblenden

TS
  • css
  1. 0
    Matthias Apsel
    1. 0
      JürgenB
      1. 0
        Rolf b
        1. 0
          JürgenB
          1. 0
            JürgenB
  2. 1
    Gunnar Bittersmann
    1. 0
      Mitleser
    2. 0
      Matthias Apsel
      1. 0
        JürgenB
        1. 0
          Matthias Apsel
          1. 0
            TS
        2. 0
          beatovich
          1. 0
            JürgenB
            1. 0
              beatovich
              1. 0
                JürgenB
        3. 3
          Gunnar Bittersmann
          1. 0
            JürgenB
            1. 0
              Gunnar Bittersmann
              • css
              • javascript
              • performance
              1. 0
                Mitleser
                1. 0
                  Gunnar Bittersmann
                  1. 0
                    TS
                    1. 0
                      Gunnar Bittersmann
                      1. 0
                        TS
                        1. 0
                          Gunnar Bittersmann
                          1. 0
                            TS
                            1. 0
                              Camping_RIDER
                              1. 0
                                Gunnar Bittersmann
                                1. 0
                                  Camping_RIDER
                                  1. 0
                                    Gunnar Bittersmann
                                    1. 0
                                      Gunnar Bittersmann
                                    2. 0
                                      Mitleser
                                      1. 0
                                        Camping_RIDER
                                  2. 0
                                    Camping_RIDER
                            2. 1
                              Gunnar Bittersmann
                              1. 0

                                Dokumente überblenden, Local Storage, Race Conditions

                                TS
                                • css
                                • javascript
                                • local storage
                                1. 0
                                  dedlfix
                                  1. 0
                                    TS
                                    1. 0
                                      dedlfix
                                  2. 0
                                    TS
                                    • local storage
                                    • selfhtml-wiki
                                    1. 0
                                      dedlfix
                              2. 0
                                Camping_RIDER
                                1. 0
                                  Camping_RIDER
                                  1. 0
                                    TS
                                  2. 0
                                    Gunnar Bittersmann
                                    1. 0
                                      Camping_RIDER
                                      1. 0
                                        Gunnar Bittersmann
                                        1. 0
                                          TS
                                          • css
                                          • javascript
                                        2. 0
                                          Camping_RIDER
                                          1. 0
                                            TS
                                            1. 0
                                              Camping_RIDER
                              3. 1
                                Matthias Apsel
                  2. 0
                    Mitleser
                    1. 0
                      Gunnar Bittersmann
                      1. 0
                        Mitleser
                        1. 0
                          TS
                          • menschelei
              2. 0
                Rolf b
                1. 0
                  Gunnar Bittersmann
                  1. 0
                    TS
                    1. 0
                      Gunnar Bittersmann
                      1. 0
                        TS
                        1. 0
                          Rolf b