Camping_RIDER: Dokumente überblenden

Beitrag lesen

Aloha ;)

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 in dem Moment in dem sich das Stylesheet serverseitig ändert schaut ein User mit LocalStorage in die Röhre - oder braucht doch wieder ständig aufs neue HTTP-Requests?

<?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; ?>

Gut, die Lösung verstehe ich (und halte ich für sinnvoll), da hier normales Caching-Verhalten ausgenutzt wird.

Grüße,

RIDER

--
Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller
# Twitter # Steam # YouTube # Self-Wiki # Selfcode: sh:) fo:) ch:| rl:) br:^ n4:? ie:% mo:| va:) js:) de:> zu:} fl:( ss:) ls:[
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