How to use js to figure out if a file exists?

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Clark Davidson
    New Member
    • Jan 2011
    • 7

    #1

    How to use js to figure out if a file exists?

    I am writing an HTML JavaScript app to dynamically update reports that have been generated by our report server. The reports are in HTML. The problem comes when there are empty pages. I get an error 404, which we all know that the page doesn't exist. I am trying to write the code to skip the pages that don't exist. Any help would be appreciated. This is all internal to our network, so Active X all the way open is ok.

    PLEASE HELP!!!!!!!!!!

    Below is my code...

    Code:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <!--
    SlideShow v1.0
    
    Simply define your "slides" in the javascript slides[] array below.
    -->
    <html>
    <head>
    <title>SiteShow 1.0</title>
    <meta http-equiv="content-type" content="text/html; charset=windows-1250">
    
    <style>
    /* Change body background-color to change fade out color. */
    body.siteshow { margin:0; padding:0; background-color:#000000; }
    #menu
    {
        font-family:Arial;
        font-size:9pt;
        display:none;
        opacity:0.00;
        -mozopacity:0.00;
        filter:alpha(opacity=0);
        position:absolute;
        top:10px;
        left:1100px;
        padding:5px;
        background-color:#000000;
        color:#FFFFFF;
        border:3px dotted #999999;
    }
    #menu a { color:#ffffff; }
    #menu a:hover { text-decoration:none; }
    #title { font-size:11pt; font-weight:bold; letter-spacing:2; }
    #slides { font-size:9pt; line-height:16pt; }
    .button { width:60px; font-size:9pt; letter-spacing:1; }
    </style>
    
    <script type="text/javascript">
    var current_idx = 0;
    var slides = new Array();
    var menuwin;
    var show_timer;
    var menu_timer;
    var menu;
    var content;
    var loaded = true;
    var time = 4;
    var html = "";
    var x = 1;
    
    // Define your "slides". 3 values for each are:
    //      1. Duration in seconds.
    //      2. Title to be used in menu.
    //      3. Source URL. Can be full URI or a relative URL.
    
    var fso  = new ActiveXObject("Scripting.FileSystemObject"); 
    var fh = fso.CreateTextFile("X:\\CrystalReports\\CurrentLaborByWO\\CurrentLaborByWO_ID.htm", true); 
    fh = fopen(getScriptPath("X:\\CrystalReports\\CurrentLaborByWO\\CurrentLaborByWO_ID.htm"), 0); // Open the file for reading 
    if(fh!=-1) {
       slides[x] = new Array(time, "Slide 1", "X:\\CrystalReports\\CurrentLaborByWO\\CurrentLaborByWO_ID.htm");
       x=x+1;
    }
    
    fh = fopen(getScriptPath("X:\\CrystalReports\\CurrentLaborByWO\\CurrentLaborByWO_ID1.htm"), 0); // Open the file for reading 
    if(fh!=-1) {
       slides[x] = new Array(time, "Slide 1", "X:\\CrystalReports\\CurrentLaborByWO\\CurrentLaborByWO_ID1.htm");
       x=x+1;
    }	
    
    fh = fopen(getScriptPath("X:\\CrystalReports\\CurrentLaborByWO\\CurrentLaborByWO_ID2.htm"), 0); // Open the file for reading 
    if(fh!=-1) {
       slides[x] = new Array(time, "Slide 1", "X:\\CrystalReports\\CurrentLaborByWO\\CurrentLaborByWO_ID2.htm");
       x=x+1;
    }	
    
    fh = fopen(getScriptPath("X:\\CrystalReports\\CurrentLaborByWO\\CurrentLaborByWO_ID3.htm"), 0); // Open the file for reading 
    if(fh!=-1) {
       slides[x] = new Array(time, "Slide 1", "X:\\CrystalReports\\CurrentLaborByWO\\CurrentLaborByWO_ID3.htm");
       x=x+1;
    }	
    
    fh = fopen(getScriptPath("X:\\CrystalReports\\CurrentLaborByWO\\CurrentLaborByWO_ID4.htm"), 0); // Open the file for reading 
    if(fh!=-1) {
       slides[x] = new Array(time, "Slide 1", "X:\\CrystalReports\\CurrentLaborByWO\\CurrentLaborByWO_ID4.htm");
       x=x+1;
    }	
    
    fh = fopen(getScriptPath("X:\\CrystalReports\\CurrentLaborByWO\\CurrentLaborByWO_ID5.htm"), 0); // Open the file for reading 
    if(fh!=-1) {
       slides[x] = new Array(time, "Slide 1", "X:\\CrystalReports\\CurrentLaborByWO\\CurrentLaborByWO_ID5.htm");
       x=x+1;
    }	
    
    fh = fopen(getScriptPath("X:\\CrystalReports\\CurrentLaborByWO\\CurrentLaborByWO_ID6.htm"), 0); // Open the file for reading 
    if(fh!=-1) {
       slides[x] = new Array(time, "Slide 1", "X:\\CrystalReports\\CurrentLaborByWO\\CurrentLaborByWO_ID6.htm");
       x=x+1;
    }	
    
    fh = fopen(getScriptPath("X:\\CrystalReports\\CurrentLaborByWO\\CurrentLaborByWO_IDLast.htm"), 0); // Open the file for reading 
    if(fh!=-1) {
       slides[x] = new Array(time, "Slide 1", "X:\\CrystalReports\\CurrentLaborByWO\\CurrentLaborByWO_IDLast.htm");
       x=x+1;
    }	
    
    
    
    
    
    function MenuInit()
    {
        var html = "";
        for(idx=1; idx<slides.length; idx++) {
            html += '<a href="javascript:Navigate('+idx+')">' +
                slides[idx][1] + "</a><br />\n";
        }
        document.getElementById("slides").innerHTML = html;
        menu.style.display = "block";
    }
    
    function MenuShow()
    {
       clearTimeout(menu_timer);
        opacity('menu', 0, 90, 500);
        menu_timer = setTimeout("MenuHide()", 3500);
    }
    
    function MenuHide()
    {
        opacity('menu', 90, 0, 500);
    }
    
    function Pause()
    {
        clearTimeout(show_timer);
        document.getElementById('play').style.display = "block";
        document.getElementById('pause').style.display = "none";
    }
    
    function Navigate(slide_idx)
    {
        clearTimeout(show_timer);
        if (current_idx == 0) {
            if (!slide_idx) { slide_idx = 1; }
            current_idx = slide_idx;
            content.src = slides[current_idx][2];
            document.getElementById('play').style.display = "none";
            document.getElementById('pause').style.display = "block";
            show_timer = setTimeout("Navigate()", slides[current_idx][0]*1000);
            return;
        }
    
        if (slide_idx) {
            current_idx = slide_idx;
            content.src = slides[current_idx][2];
            document.getElementById('play').style.display = "block";
            document.getElementById('pause').style.display = "none";
            return;
        }
    
        loaded = false;
        current_idx++;
        if ( current_idx == slides.length) { current_idx = 1; }
        opacity('content', 100, 0, 500);
        document.getElementById('play').style.display = "none";
        document.getElementById('pause').style.display = "block";
        show_timer = setTimeout("Navigate()", slides[current_idx][0]*1000);
        return;   
    }
    
    function opacity(id, opacStart, opacEnd, millisec)
    {
        //speed for each frame
        var speed = 0;
    	// Math.round(millisec / 50);
        var timer = 0;
    
        //determine the direction for the blending, if start and end are the same nothing happens
        if(opacStart > opacEnd) {
            for(i = opacStart; i >= opacEnd; i--) {
                setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
                timer++;
            }
            if (opacEnd == 0) { setTimeout("FadeOutTrigger('"+id+"')",((timer-1) * speed));; }
            //if (opacEnd == 0) { FadeOutTrigger(id); }
        } else if(opacStart < opacEnd) {
            if (opacStart == 0) { FadeInTrigger(id); }
            for(i = opacStart; i <= opacEnd; i++)
                {
                setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
                timer++;
            }
        }
    }
    
    //change the opacity for different browsers
    function changeOpac(opacity, id)
    {
        var object = document.getElementById(id).style;
        object.opacity = (opacity / 100);
        object.MozOpacity = (opacity / 100);
        object.KhtmlOpacity = (opacity / 100);
        object.filter = "alpha(opacity=" + opacity + ")";
    }
    
    function FadeOutTrigger(id)
    {
        //alert('FadeOut: '+id);
        switch(id) {
        case "menu":
            document.getElementById(id).style.display = "none";
            break;
        case "content":
            content.src = slides[current_idx][2];
            //setTimeout("opacity('content', 0, 100, 500)", 1000);
            break;
        default:
            break;
        }
    }
    
    function FadeInTrigger(id)
    {
        //alert('FadeIn: '+id);
        switch(id) {
        case "menu":
            document.getElementById(id).style.display = "block";
            break;
        case "content":
            //opacity('content', 0, 100, 500);
            break;
        default:
            break;
        }
    }
    
    function FadeInContent()
    {
    	Html2Load();
    	if (!loaded) {
    		opacity('content', 0, 100, 500);
            loaded = true;
        }
    }
    
    function LoadTrigger()
    {
        //self.resizeTo(1366,768);
        menu = document.getElementById('menu');
    	var html = "";
        for(idx=1; idx<slides.length; idx++) {
            html += '<a href="javascript:Navigate('+idx+')">' +
                slides[idx][1] + "</a><br />\n";
        }
    //	checkUrl(html);
        content = document.getElementById('content');
        Navigate();
        MenuInit();
        MenuShow();
    }
    
    window.onload = LoadTrigger;
    
    </script>
    
    </head>
    <body class="siteshow">
    <iframe id="content" name="content" style="width:100%; height:100%;" frameborder="no" scrolling="auto" src="" onmouseover="MenuShow();" onload="FadeInContent();" ></iframe>
    <div id="menu">
        <div id="title">Display Menu</div>
        <div id="slides">
        </div>
        <p>
            <input id="pause" class="button" style="display:block;" type="button" value="pause" onclick="Pause()" />
            <input id="play" class="button" style="display:none;" type="button" value="play" onclick="Navigate()" />
        </p>
    </div>
    </body>
    </html>
    Last edited by Dormilich; Jan 4 '11, 06:44 PM. Reason: please use [code] [/code] tags when posting code
  • Dormilich
    Recognized Expert Expert
    • Aug 2008
    • 8694

    #2
    not sure what ActiveX has in stock, but in JavaScript you can make an AJAX HEAD request (to the server), which only returns the file response headers (which hold the 404 status).

    Comment

    • Clark Davidson
      New Member
      • Jan 2011
      • 7

      #3
      Is that something I can put in my code that was provided on the first post. Can you help?

      Comment

      • Rabbit
        Recognized Expert MVP
        • Jan 2007
        • 12517

        #4
        The Scripting.FileS ystemObject object has a FileExists method.

        Comment

        • Clark Davidson
          New Member
          • Jan 2011
          • 7

          #5
          Is this how I would use the code?


          Code:
          var x = 1;
          var fso  = new Scripting.FileSystemObject("Scripting.FileSystemObject"); 
          var fh = fso.FileExists("I:\\CrystalReports\\CurrentLaborByWO\\CurrentLaborByWO_ID.htm", true); 
           if(fh!=-1) {
             slides[x] = new Array(time, "Slide 1", "I:\\CrystalReports\\CurrentLaborByWO\\CurrentLaborByWO_ID.htm");
             x=x+1;
          }
          Last edited by Dormilich; Jan 5 '11, 12:18 PM. Reason: please use [code] [/code] tags when posting code

          Comment

          • Clark Davidson
            New Member
            • Jan 2011
            • 7

            #6
            I have tried what I think is everything. I keep getting an error "Automation server can't create object" any ideas what I need to do?

            Comment

            • Rabbit
              Recognized Expert MVP
              • Jan 2007
              • 12517

              #7
              myObject = new ActiveXObject(" Scripting.FileS ystemObject");

              Comment

              • Clark Davidson
                New Member
                • Jan 2011
                • 7

                #8
                This is what I have and I am still getting this error "Automation server can't create object" Do I not have my Internet Explorer setting set properly for ActiveX? Or is there something I am missing?

                Code:
                var myObject = new ActiveXObject("Scripting.FileSystemObject"); 
                if (myObject.FileExists("I:\\CrystalReports\\CurrentLaborByWO\\CurrentLaborByWO_ID.htm")) {
                	slides[x] = new Array(time, "Slide 1", "I:\\CrystalReports\\CurrentLaborByWO\\CurrentLaborByWO_ID.htm");
                	x=x+1;
                }
                Last edited by Dormilich; Jan 5 '11, 12:18 PM. Reason: please use [code] [/code] tags when posting code

                Comment

                • Rabbit
                  Recognized Expert MVP
                  • Jan 2007
                  • 12517

                  #9
                  That's possible. Check your ActiveX settings and see if something is blocking it. I normally have no problems doing what you're trying to do. Except I use VBScript instead of JavaScript.

                  Comment

                  • Clark Davidson
                    New Member
                    • Jan 2011
                    • 7

                    #10
                    Rabbit,

                    Thanks for you help ... end of the day today so I will start up in the morning.

                    Comment

                    • Clark Davidson
                      New Member
                      • Jan 2011
                      • 7

                      #11
                      Which is best VBScript of JavaScript for this situation?

                      Comment

                      • Rabbit
                        Recognized Expert MVP
                        • Jan 2007
                        • 12517

                        #12
                        VBScript is easier, JavaScript is more powerful and flexible. It's up to you really, whichever one you're more comfortable with. If it can be done in VBScript, then it can be done in JavaScript. It's probably just some setting preventing it from being run. Are you trying to do this from an HTML file? Change the extension to an HTA file and see if that works.

                        Comment

                        Working...