Javascript Debugging in Internet Explorer using the MS Script Editor

 

- A fully functional and robust debugging environment for Javascript programmers developing for Internet Explorer

 

I’ve finally found a good Jscript/Javascript debugging solution; it sounds vanilla and mundane, but after researching for days, I found a guy on a USENET group who mentioned his group is using the Microsoft Script Editor included as a stand-alone utility with Microsoft Office with FrontPage 2003 and FP_XP. This is a commercial use release of Office for corporate customers. This editor may also be included with other versions of Office as well. It may also be included with any recent version of Frontpage.

 

The MS Script Editor is an amazing IDE for script development and has a javascript debugger built into it that is closely tied to IE6 and allows for seamless Javascript debugging of very sophisticated web-based applications. Not to be confused with the lackluster Microsoft Javascript Debugger (1997), the Microsoft Script Editor (2001) is a fully functioning editor/debugger that is very robust and has never crashed  for me after many months of use. Best of all, it’s FREE if you already have one of the many MS products that includes it as an optional feature.

 

Since Microsoft obviously does not wish to support JSP developers with their current flagship developer products, this is an amazing godsend for Java/JSP programmers developing for Internet Explorer. My company invested $1200 into an MSDN license, only to find that the free OfficeXP Scripting Editor worked much better than Visual Studio.NET, which does not support JSP development. And look across the internet; you won’t find a better solution than the one listed below if you are a Javascript/Jscript developer oriented to IE.

 

NOTE: it is not necessary to have Frontpage installed on your machine to use the Script Editor. The script editor is an add-on in the tools area of the OfficeXP INSTALLER (probably 2002 as well) CD. I have “Microsoft Office XP Professional with Frontpage” installed on my PC. I uninstalled the old Microsoft Javascript Debugger (1997), (crashes and is horribly obsolete) before following the procedure mapped out below.

 

 

Chapter 1.          INSTALLING THE MICROSOFT SCRIPT EDITOR

 

 

1)         From the Start Menu, if Frontpage is listed, start it, and search on the help files for "Script Debug".

 

If Frontpage is not in your start menu, it is possible to add only the script editor as a standalone application:

 

- Go to Control Panel, Add/Remove Software and open the Office Add/Remove/Repair function.

Here you can look for Office Tools, Script Editor and Debugger and set it to run from your hard disk.

 

This should install the editor from CAB files on your hard disk, but it may be necessary to use the Office CD as an alternative.

 

2) Start the Scripting Editor found under Tools/Macros/Script Editor in Frontpage. If you loaded only the script editor, the target is:

 

C:\Program Files\Microsoft Office\Office10\MSE7.EXE

 

and you can put a shortcut for it in your quickstart menu with this path.

 

3) Once the script editor was started, run the Web Debugging option under the Debug Menu.

 

This will prompt you to install the debugging features and warns that the editor will have to be restarted to use the Debugger.

 

Order of install is important; don't uninstall the MS Script Debugger after installing the MS Script Editor; it will mess up your registry settings and you will have to start over from scratch by first uninstalling the Script Editor and then re-installing it.

 

Chapter 2.                   USING THE MS SCRIPT EDITOR

 

 

1)         Add the “debugger” keyword to any script, and it opens the script editor at that point, when the script is run in the browser. The debugger should come up when the browser issues an error alert. At first this was not working for me, but I went into the IE options panel, under Advanced and turned off “Hide scripting Errors” option, as well as turned off “Friendly Error messages”. I also had to turn on the Status Bar under the View menu. The debugger will also come up if you have a script debugger entry in IE under the View menu, like this: debugger;

 

 Click Yes.  Click Yes.

 

2)         You may be prompted to run a regedit script the first time you try to use the debugger. Open a CMD window and run the path in the prompt, to set the proper Registry settings (notice it’s forward slash before the RegServer argument):

 

“C:\Program Files\Common Files\Microsoft Shared\VS7Debug\vs7jit.exe” /RegServer

 

NOTE: if by now, installation has not progressed as described above, try running the script above, and then logout and log back in again to be sure your machine as reloaded the registry and is now seeing your modifications.

3)         Notice once the editor opens, the script is now open in the editor, and you have yellow highlighted line and pointer where the debugger keyword was used in the script. Look at the top of the window, and it lists the file currently open and the path to the file. This has saved me many times when I was editing the wrong file and could not see my changes showing up; I simply activated the debugger and found the correct page I needed to be editing!

 

4)     There is a third way to force the debugger to open when interactively working with a page in the browser. Use the View menu, and you should see a new Script Debugger entry which has an option for “Break at Next Statement”. Once you select this, the next click on the page will force the debugger to open at whatever point in the code is issuing and handling the current event. Keep in mind, many times this will put you into an HTML page, and you will have to click on the debugger’s “Step Into” function to force the debugger to open the associated .js file if you are using JS include files.

 

 

The View menu allows entry straight into the debugger on the next click event.

 

5)         Under the Debugger menu, there are now all the typical debugging commands available.

Also notice:

 

            a) Expression evaluation is available is Quick Watch, and vars can be added to a Watch List.

            b) DOM objects may be inspected in the browser document tree, as to ID, ParentId, etc and the entire DOM tree can be walked thru in it's full heirarchy.

            c) Stepping thru the script is easy with Step In, Step Over; break points may be added in the usual fashion (left margin toggle click).

            d) .JS files will be opened as the program execution requires (the application I am working on opens several .js files in a row)

            e) A toolbar for the debugging commands exists but will need to be configured and placed in the menu bar (similar to IE).

            f) All debugger commands have keyboard shortcuts that speed things along...

 

 

When the debugger first comes up, it will point out any error the browser found.

 

 

Use the Quickwatch page to inspect a page object or javascript object, revealing it’s properties in an expanded view. Walk the DOM up or down and see all currently set attributes and innerHTML content!

 

 

Use the Quickwatch command to evaluate a current object or variable selection, then add it to the Watch list at the bottom of the editor window. Notice breakpoints have been set by clicking on the left margin of the page.

 

6)         Also refer to the Help file in the Script Editor for debugger commands help. It's short and sweet.

 

 

A few quick notes regarding the use of the debugger and Javascript error handling:

 

-         Use the debugger keyword in your script to bring up the debugger at a point before you need to find a scripting error. Often it is most effective to simply put “debugger;” in the same line in your HTML that calls the function you want to debug: onClick=javascript:debugger;functionCall().

-         Once you have arrived at the line throwing the error, you may inspect all variables current values by using the Evaluator window (magnifying glass on the toolbar).

-         You will not be allowed to proceed in IE until the debugger is past the current break point or step. If it is stuck on an error, use the “Play” or “Stop icon in the toolbar.

-         If you are using a variable to collect HTML and then write it to the page with document.write, the HTML source will not be viewable with the view/source option in IE. It also will not be visible to the debugger, and the debugger will report it cannot preceed into the code currently being executed. If you must see the rendered HTML/JS it is possible to do a window.document.write(var) that points to a popup window previously opened for the purpose of writing into it (where “window” is a var that equals the popup window, like this:  var newWin = window.open(‘’,’newwin’, 500, 500); Then use view/source in the popup to see the source of the newWin.document.write(var). You may then run the debugger in the new window.

-         Sometimes it may be difficult to know if an error is caused by a problem before or after the page has been submitted. For Java developers, often problems are reported by JSP or Java class files after the request object is submitted to the application server, but the error is in the javascript before submission. This is easy to check by viewing the submitted request object in a Java IDE. Attach or connect your debugger and submit the page or run the function that submits to the application server. It is possible to not only view the Javascript as it runs pre-submit, but then open the Java IDE debugger (Eclipse will probably work, or use IDEA) and interrogate the request.parameters.HashArrayParameterString and view the value attached to the parameters in the submit to be sure they are all populated as you expect them to be submitted to the application server. If they are not, your problem in the JSP or Javascript prior to page submit. This helps narrow down unexpected problems quickly, (except when your JSP suddenly starts failing to compile ;-)

- With a java IDE and the MS script editor, it is possible to watch the entire execution path of your web application run from button click to the rendered response in your browser window. However, keep in mind the browser runs in a threaded fashion, and sometimes when you expect a JS statement to work, it will not, for non-obvious reasons. Keep in mind the browser has memory allocation issues particular to referencing existing variables and objects. If your script is not working and the debugger is not helping you, I find it helps to study Javascript memory allocation issues regarding references to existing vars and arrays, vs constructing fully memory allocated datastructures. It will occasionally be necessary to know more about Javascript than the debugger is capable of demonstrating to you. Sometimes, putting a statement inside of a setTimeout call can force a new execution thread to start and solve problems if the javascript interpreter is becoming confused and fails to execute as you expect. Or use an eval() function. Or possibly use document.body.onclick = functionCall() to kick the javascript into action. Problems in Javascript are sometimes evident when code properly executes after a debugging alert comes up, but does not run if execution is not first interrupted by the alert. This points to interpreter execution bugs or loss of the thread because it’s left open and hanging somehow, and may require the setTimeout to force a new thread to take up where the old one failed to execute the line in question, at least as a temporary workaround.