home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / WindowsServerTrial / server.iso / sources / install.wim / 2 / Windows / System32 / ieframe.dll / HTML / ANALYZE.JS < prev    next >
Text File  |  2008-01-19  |  12KB  |  427 lines

  1. ∩╗┐window.onerror = HandleError
  2.  
  3. var HTMLKEYESCAPE = 27
  4.  
  5. //+-------------------------------------------------------------------
  6. //
  7. //  Synopsis:   Turns off error messages in dialogs
  8. //
  9. //  Arguments:  none
  10. //
  11. //  returns:    true (tells browser not to handle message)
  12. //
  13. //--------------------------------------------------------------------
  14.  
  15. function HandleError(message, url, line)
  16. {
  17.     var str = L_Dialog_ErrorMessage + "\n\n" 
  18.         + L_ErrorNumber_Text + line + "\n"
  19.         + message;
  20.  
  21.     alert (str);
  22.     window.close();
  23.  
  24.     return true;
  25. }
  26.  
  27.  
  28. //+---------------------------------------------------------------------
  29. //
  30. //  Synopsis:   Returns the document object for the page to be analyzed
  31. //
  32. //  Arguments:  none
  33. //
  34. //  returns:    document object for the page to be analyzed
  35. //
  36. //----------------------------------------------------------------------
  37.  
  38. function otherDocument() 
  39. {
  40.     return window.dialogArguments.document;
  41. }
  42.  
  43.  
  44. //+---------------------------------------------------------------------
  45. //
  46. //  Synopsis:   onload handler for this dialog. sets up events. Calls 
  47. //        analysis function.
  48. //
  49. //  Arguments:  none
  50. //
  51. //  returns:    none
  52. //
  53. //----------------------------------------------------------------------
  54.  
  55. function loadBdy()
  56. {
  57.     //
  58.     //  Bind events to controls. This is done here to load the dialog
  59.     //  quicker.
  60.     //
  61.  
  62.     document.all.btnOk.onclick = new Function("window.close();");
  63.     document.onkeyup = new Function("documentOnKeyUp()");
  64.  
  65.     runAnalysis();
  66.  
  67. }   //  loadBdy
  68.  
  69.  
  70. //+---------------------------------------------------------------------
  71. //
  72. //  Checks for the escape key and closes the dialog
  73. //
  74. //----------------------------------------------------------------------
  75.  
  76. function documentOnKeyUp()
  77. {
  78.     if (window.event.keyCode == HTMLKEYESCAPE)
  79.     {
  80.         window.close();
  81.     }
  82. }   //  documentOnKeyUp
  83.  
  84.  
  85. //+---------------------------------------------------------------------
  86. //
  87. //  Synopsis:   Performs analysis function on primary document. 
  88. //        Initializes display error, then calls each of the individual
  89. //        analysis functions in turn
  90. //
  91. //  Arguments:  none
  92. //
  93. //  returns:    none
  94. //
  95. //----------------------------------------------------------------------
  96.  
  97. function runAnalysis() 
  98.     var errorsFound, reportLocation;
  99.  
  100.     errorsFound = false;
  101.  
  102.     reportLocation = document.all.ReportArea;
  103.  
  104.     initializeResults(reportLocation);
  105.  
  106.     errorsFound = errorsFound || checkBodyWithinFrameset(reportLocation);
  107.     errorsFound = errorsFound || checkAnythingAfterFrameset(reportLocation);
  108.     errorsFound = errorsFound || checkUnloadedComponents(reportLocation);
  109.     errorsFound = errorsFound || checkNonApartmentControls(reportLocation);
  110.     errorsFound = errorsFound || checkUnloadedStyleSheets(reportLocation);
  111.  
  112.     if (errorsFound == false) {
  113.        reportNothingFound(reportLocation);
  114.     }
  115. }
  116.  
  117. //+---------------------------------------------------------------------
  118. //
  119. //  Synopsis:   Sets the initial state of the results window - blank
  120. //
  121. //  Arguments:  none
  122. //
  123. //  returns:    none
  124. //
  125. //----------------------------------------------------------------------
  126.  
  127. function initializeResults(reportLocation) 
  128. {
  129.    reportLocation.innerHTML = " ";
  130. }
  131.  
  132. //+---------------------------------------------------------------------
  133. //
  134. //  Synopsis:   If no errors found in document, reports that to user
  135. //
  136. //  Arguments:  none
  137. //
  138. //  returns:    none
  139. //
  140. //----------------------------------------------------------------------
  141.  
  142. function reportNothingFound(reportLocation) 
  143. {
  144.    reportLocation.innerHTML = L_NoErrors_Text;
  145. }
  146.  
  147. //+---------------------------------------------------------------------
  148. //
  149. //  Synopsis:   Checks for existence of a frameset and a body on the same document 
  150. //
  151. //  Arguments:  none
  152. //
  153. //  returns:    true if found, false if not
  154. //
  155. //----------------------------------------------------------------------
  156.  
  157. function checkBodyWithinFrameset(reportLocation) 
  158. {
  159.    var theDocument;
  160.    var framesets, bodies;
  161.    var retVal;
  162.  
  163.    retVal = false;
  164.  
  165.    theDocument = otherDocument();
  166.  
  167.    framesets = theDocument.all.tags("frameset");
  168.    
  169.    if (framesets.length > 0) {
  170.        bodies = theDocument.all.tags("body");
  171.        if (bodies.length > 0) {
  172.            reportLocation.insertAdjacentHTML("BeforeEnd", L_FramesetInBody_Text );
  173.           
  174.            retVal = true;
  175.        }
  176.    }
  177.    // tested case of implied body - looks like trident creates a body 
  178.    // tag even when one doesn't exist
  179.  
  180.    return retVal;
  181. }
  182.  
  183. //+---------------------------------------------------------------------
  184. //
  185. //  Synopsis:   Checks for existence of any tags but comments after a frameset 
  186. //
  187. //  Arguments:  none
  188. //
  189. //  returns:    true if found, false if not
  190. //
  191. //----------------------------------------------------------------------
  192.  
  193. function checkAnythingAfterFrameset(reportLocation) 
  194. {
  195.    var theDocument;
  196.    var framesets;
  197.    var i, startIndex;
  198.    var retVal;
  199.  
  200.    retVal = false;
  201.  
  202.    theDocument = otherDocument();
  203.  
  204.    framesets = theDocument.all.tags("frameset");
  205.    
  206.    if (framesets.length > 0) {
  207.       startIndex = framesets(0).sourceIndex;
  208.       
  209.      if (window.dialogArguments.anythingAfterFrameset) {
  210.         reportLocation.insertAdjacentHTML("BeforeEnd", L_ContentAfterFrameset_Text );
  211.         retVal = true;
  212.      }
  213.    }
  214.  
  215.    return retVal;
  216. }
  217.  
  218. //+---------------------------------------------------------------------
  219. //
  220. //  Synopsis:   Checks for existence of objects, applets or embeds that are
  221. //        readyState != complete
  222. //
  223. //  Arguments:  none
  224. //
  225. //  returns:    true if found, false if not
  226. //
  227. //----------------------------------------------------------------------
  228. function checkUnloadedComponents(reportLocation) 
  229. {
  230.    var theDocument;
  231.    var objects, applets, embeds;
  232.    var retVal;
  233.    retVal = false;
  234.  
  235.    theDocument = otherDocument();
  236.  
  237.    objects = theDocument.all.tags("object");
  238.    applets = theDocument.all.tags("applet");
  239.    embeds = theDocument.all.tags("embed");
  240.  
  241.    retVal = checkReadyStateComplete(objects, reportLocation);
  242.    retVal = retVal || checkReadyStateComplete(applets, reportLocation);
  243.    retVal = retVal || checkReadyStateComplete(embeds, reportLocation);
  244.  
  245.    return retVal;
  246. }
  247.  
  248. //+---------------------------------------------------------------------
  249. //
  250. //  Synopsis:   Checks for readystate = complete for collection passed in. 
  251. //           If any components found that are not readystate = complete
  252. //        error is passed to reportLocation. Valid for object, applet
  253. //        and embed
  254. //
  255. //  Arguments:  collection of elements to check for readystate = complete
  256. //        area to report errors to
  257. //
  258. //  returns:    true if found, false if not
  259. //
  260. //----------------------------------------------------------------------
  261.  
  262. function checkReadyStateComplete(objects, reportLocation) 
  263. {
  264.   var strNotInstalled;
  265.   var strNotInstalledReason;
  266.  
  267.   var i, element;
  268.   var retVal;
  269.  
  270.   retVal = false;
  271.  
  272.   if (objects == null) 
  273.      return retVal;
  274.  
  275.   for (i=0; i < objects.length; i++) {
  276.      element = objects(i);
  277.      // looks like 4 = complete
  278.      if (element.readyState != 4 && element.readyState != "complete") {
  279.          switch (element.tagName.toLowerCase())
  280.          {
  281.          case "object":
  282.              strNotInstalled = L_ObjectNotInstalled_Text;
  283.              strNotInstalledReason = L_ObjectNotInstalledReasons_Text;
  284.              break;
  285.          case "applet":
  286.              strNotInstalled = L_AppletNotInstalled_Text;
  287.              strNotInstalledReason = L_AppletNotInstalledReasons_Text;
  288.              break;
  289.          case "embed":
  290.              strNotInstalled = L_EmbedNotInstalled_Text;
  291.              strNotInstalledReason = L_EmbedNotInstalledReasons_Text;
  292.              break;
  293.          }
  294.  
  295.         reportLocation.insertAdjacentHTML("BeforeEnd", strNotInstalled);
  296.         reportLocation.insertAdjacentText("BeforeEnd", element.outerHTML);
  297.         reportLocation.insertAdjacentHTML("BeforeEnd", strNotInstalledReason);
  298.         retVal = true;
  299.      }
  300.   }
  301.  
  302.   return retVal;
  303. }
  304.      
  305. //+---------------------------------------------------------------------
  306. //
  307. //  Synopsis:   Checks for existence ocx's that are known to be non-apartment
  308. //        model
  309. //
  310. //  Arguments:  none
  311. //
  312. //  returns:    true if found, false if not
  313. //
  314. //----------------------------------------------------------------------
  315. function checkNonApartmentControls(reportLocation) 
  316. {
  317.    var theDocument;
  318.    var objects;
  319.    var i;
  320.    var retVal;
  321.    retVal = false;
  322.  
  323.    theDocument = otherDocument();
  324.  
  325.    objects = theDocument.all.tags("object");
  326.  
  327.    for (i=0; i < objects.length; i++) {
  328.      element = objects(i);
  329.      nonApartmentModel = checkCLSIDForNonApartmentModel(element);
  330.      retVal = retVal || nonApartmentModel;
  331.      if (nonApartmentModel == true) {
  332.         reportLocation.insertAdjacentHTML("BeforeEnd", L_ObjectNotApartmentModel_Text);
  333.         reportLocation.insertAdjacentText("BeforeEnd", element.outerHTML);
  334.         reportLocation.insertAdjacentHTML("BeforeEnd", "<br><hr>");
  335.      }
  336.    }    
  337.  
  338.    return retVal;
  339. }
  340.  
  341. //+---------------------------------------------------------------------
  342. //
  343. //  Synopsis:   Checks to see if specified clsid is for an apartment model 
  344. //        control
  345. //
  346. //  Arguments:  clsid to check
  347. //
  348. //  returns:    true if non-apartment model, false if apartment model
  349. //
  350. //----------------------------------------------------------------------
  351.  
  352. function checkCLSIDForNonApartmentModel(element) {
  353.  
  354.     return !(window.dialogArguments.isApartmentModel(element));
  355. }
  356.  
  357.  
  358. //+---------------------------------------------------------------------
  359. //
  360. //  Synopsis:   Checks for any link tags where readyState != complete 
  361. //
  362. //  Arguments:  none
  363. //
  364. //  returns:    true if found, false if not
  365. //
  366. //----------------------------------------------------------------------
  367. function checkUnloadedStyleSheets(reportLocation) 
  368. {
  369.    var theDocument;
  370.    var links;
  371.    var retVal;
  372.    retVal = false;
  373.  
  374.    theDocument = otherDocument();
  375.  
  376.    links = theDocument.all.tags("link");
  377.  
  378.    retVal = checkLinkReadyStateComplete(links, reportLocation);
  379.  
  380.    return retVal;
  381. }
  382.  
  383.  
  384. //+---------------------------------------------------------------------
  385. //
  386. //  Synopsis:   Checks for readystate = complete for collection of links  passed in. 
  387. //           If any links found that are not readystate = complete
  388. //        error is passed to reportLocation. Note that separate function
  389. //        is used for links because different error info needs to 
  390. //        be reported
  391. //
  392. //  Arguments:  collection of elements to check for readystate = complete
  393. //        area to report errors to
  394. //
  395. //  returns:    true if found, false if not
  396. //
  397. //----------------------------------------------------------------------
  398.  
  399. function checkLinkReadyStateComplete(objects, reportLocation) 
  400. {
  401.   var i, element;
  402.   var retVal;
  403.  
  404.   retVal = false;
  405.  
  406.   if (objects == null) 
  407.      return retVal;
  408.  
  409.   for (i=0; i < objects.length; i++) {
  410.      element = objects(i);
  411.      
  412.      if (element.rel.toLowerCase() == "stylesheet"
  413.          || element.rel.toLowerCase() == "alternate stylesheet")
  414.      {
  415.         // looks like 4 = complete
  416.          if (element.readyState != "complete" && element.readyState != 4) {
  417.             reportLocation.insertAdjacentHTML("BeforeEnd", L_StyleSheetNotInstalled_Text + element.href + "<BR><hr>");
  418.             retVal = true;
  419.          }
  420.      }
  421.      }
  422.  
  423.   return retVal;
  424. }
  425.  
  426.