Skip to main content

How to make div suddenly show if JavaScript is disabled even if page has already been opened



I know how to display content if JavaScript is disabled, but what I want to do is make a div suddenly appear even if the page is open at the time of JavaScript being disabled.





  1. The page is opened.



  2. The user goes to browser settings and disables JavaScript.



  3. A div shows without refreshing the page.







How can I do this? I've seen other sites do this but I looked at their JavaScript files and didn't find anything in it.





Thanks in advance!


Comments

  1. Here's a solution using CSS animations. They're not supported everywhere, but I can't think of any alternative.

    This hides your message by giving it a font-size of 0, which is reset to 100% after a delay of one second. Every half-second the JavaScript restarts the animation by switching to a dummy animation which keeps the element hidden. (Demo on jsfiddle)

    HTML

    <div id="noscript-message">
    Please enable JavaScript to use this page.
    </div>

    <div>
    Spiffy JavaScript app here!
    </div>


    CSS

    #noscript-message {
    -webkit-animation-duration: 1s;
    -webkit-animation-name: delayedDisplay;
    color: blue;
    }

    @-webkit-keyframes delayedDisplay {
    0% { font-size: 0;}
    99% { font-size: 0;}
    100% { font-size: 100%; }
    }

    @-webkit-keyframes delayedDisplay_dummy {
    0% { font-size: 0; }
    100% { font-size: 0; }
    }


    JavaScript

    var message = document.getElementById("noscript-message");

    setInterval(function() {
    message.style.webkitAnimationName = "delayedDisplay_dummy";
    setTimeout(function() {
    message.style.webkitAnimationName = "delayedDisplay";
    }, 0);
    }, 500);


    You would need to duplicate all of the webkit prefixed properties with the other vendor prefixes; I've omitted them here for clarity.

    ReplyDelete
  2. As far as I know, this is not possible, not without refreshing the page, at least not using just HTML and Javascript. The behaviour you are describing is not in any standard, so different browsers may act differently once a user has selected to disable javascript.

    The normal mechanism as a developer would be use a <noscript> element. Most browsers will display this if the page was loaded and javascript was disabled. Some browsers may display it also if the page loaded and the user then disabled javascript.

    When scripting is disabled, the contents of this element comes up once the page is refreshed.

    ReplyDelete
  3. You could have your <div> inside a <noscript> element, and then use CSS to animate its opacity:

    @-webkit-keyframes showme {
    0% { opacity: 0; }
    100% { opacity: 1; }
    }
    @-moz-keyframes showme {
    0% { opacity: 0; }
    100% { opacity: 1; }
    }
    @-ms-keyframes showme {
    0% { opacity: 0; }
    100% { opacity: 1; }
    }

    #box {
    -webkit-animation: showme 5s;
    -moz-animation: showme 5s;
    -ms-animation: showme 5s;
    }


    ...Of course, browser support would be an issue.

    ReplyDelete

Post a Comment

Popular posts from this blog

Why is this Javascript much *slower* than its jQuery equivalent?

I have a HTML list of about 500 items and a "filter" box above it. I started by using jQuery to filter the list when I typed a letter (timing code added later): $('#filter').keyup( function() { var jqStart = (new Date).getTime(); var search = $(this).val().toLowerCase(); var $list = $('ul.ablist > li'); $list.each( function() { if ( $(this).text().toLowerCase().indexOf(search) === -1 ) $(this).hide(); else $(this).show(); } ); console.log('Time: ' + ((new Date).getTime() - jqStart)); } ); However, there was a couple of seconds delay after typing each letter (particularly the first letter). So I thought it may be slightly quicker if I used plain Javascript (I read recently that jQuery's each function is particularly slow). Here's my JS equivalent: document.getElementById('filter').addEventListener( 'keyup', function () { var jsStart = (new Date).getTime()...

Is it possible to have IF statement in an Echo statement in PHP

Thanks in advance. I did look at the other questions/answers that were similar and didn't find exactly what I was looking for. I'm trying to do this, am I on the right path? echo " <div id='tabs-".$match."'> <textarea id='".$match."' name='".$match."'>". if ($COLUMN_NAME === $match) { echo $FIELD_WITH_COLUMN_NAME; } else { } ."</textarea> <script type='text/javascript'> CKEDITOR.replace( '".$match."' ); </script> </div>"; I am getting the following error message in the browser: Parse error: syntax error, unexpected T_IF Please let me know if this is the right way to go about nesting an IF statement inside an echo. Thank you.