Debugging Your Code

scaredbaconΛογισμικό & κατασκευή λογ/κού

4 Ιουλ 2012 (πριν από 5 χρόνια και 4 μήνες)

269 εμφανίσεις

If you are using CSS,DHTML,or Ajax to cre-
ate your Web pages,eventually you will have
errors.Like death and taxes,bugs in your
code are inescapable.
I’ve tested and retested the code in this book
on the most popular browsers and operating
systems available and hope that it’s as bug-
free as humanly possible.However,you will
inevitably have to adapt the code for your
own use.You’ll have to change variables,
values,URLs,and styles.You may have to
combine code fromdifferent examples.You
may even have to write your own functions
fromscratch.
This means bugs.
This online resource guides you through
some of the most common problems,helps
you identify and fix them,and (I hope) keeps
you fromsmashing your monitor with a heavy
mallet when things go wrong.Remember
also that you can download all the code in
this book fromwww.webbedenvironments.
com/css_dhtml_ajax.
1
Debugging
YourCode
A
DebuggingYourCode
Troubleshooting CSS
All too often,you carefully set up your style
sheet rules,go to your browser,and see…
nothing.Don’t worry,this happens to
everyone.
Check the following
There are many things that might be prevent-
ing your style sheet rules fromworking prop-
erly;most of themare easily spotted.Figure
A.1 points out some common problems you
may encounter.
2
Online Resource A
TroubleshootingCSS
Figure A.1 Errors are inevitable,but don’t let themruin your day.This figure shows examples of some of the most
common CSS problems.
Is this the correct URL?
Missing period for class
or number sign for ID
Missing quotes around
multiword font name
Will this be 12px
or 16px?
Missing
;
Missing
*/
This should be “font”
Missing
</p>
Missing
}
Missing
/
“bold” is not a font size

Are the properties you’re using avail-
able for your platformand browser?
Not all properties are supported by all
browsers—it depends on the operating
systembeing used.Check Online
Reference B on this Web site to see
whether the property works with the
intended browser and OS.

Does your selector contain typos?
If you forget the opening period or num-
ber sign (
#
) for classes and IDs,they
won’t work.

Do the properties contain typos?
Typos in one property can cause the
entire rule to fail.

Are the values you’re using permitted
for that property?Using improper val-
ues may cause a definition to fail or
behave unpredictably.

Are you missing any semicolons?A
missing semicolon at the end of a decla-
ration will cause the entire rule to fail.

Did you open and close the declara-
tion block with curly brackets?If not,
there’s no telling what will happen.

Did you remember to close all your
multiline comment tags?If not,the
rest of the CSS is treated as a comment
(see “Adding Comments to CSS” in
Chapter 2).

Are the HTML tags set correctly in
the document?Remember that you have
to use an end
</p>
to make the paragraph
tag work properly with CSS (see “Kinds
of Tags” in Chapter 1).
3
Debugging Your Code
TroubleshootingCSS
continues on next page

If your rules are in the head,did you
use the
<style>
tag correctly?Typos in
the
<style>
tag mean that none of the
definitions are used.In addition,if you
set the media type,the styles will only
affect output to that medium.So setting
the media type to
print
will prevent
those styles fromaffecting content dis-
played on the screen (see “Adding Styles
to a Web Page” in Chapter 2).

If you are linking or importing style
sheets,are you retrieving the correct
file?Check the exact path for the file.
Also,remember that you should not
include the
<style>
tag in an external
CSS file (see “Adding Styles to a Web Site”
in Chapter 2).

Do you have multiple,perhaps con-
flicting,rules for the same tag?Check
your cascade order (see “Determining the
Cascade Order” in Chapter 2).
4
Online Resource A
TroubleshootingCSS
If all else fails,try these ideas
If you’ve looked for the above errors and still
can’t get your code to work,here are a few
more things to try.

Try to make the declaration
!important
.
Often your declarations will conflict with
each other,and may be hard to track down
where the conflict is.Adding
!important
tothedeclaration(see“Makinga Declaration
!important” in Chapter 2) will ensure that
if it is working,it is applied to the page.

Delete the rules and retype them.
When you can’t see what’s wrong,retyp-
ing code fromscratch sometimes fixes it.

Test the same code on another brows-
er and/or operating system.It’s possi-
ble that a property is buggy and doesn’t
work correctly in your browser.It’s even
possible that the browser doesn’t allow
that property to work with that tag.

Give up and walk away fromthe proj-
ect.Just joking—though you might want
to take a 15-minute break before looking
at the problemagain.

If nothing else works,try a different
solution to the design problem.
5
Debugging Your Code
TroubleshootingCSS
Validating Your CSS
Although both Dreamweaver and GoLive will
make sure your CSS code is accurate,the
World Wide Web Consortium(W3C) provides
a Web site called the CSS Validator that lets
you check your CSS to confirmthat it meets
the requirements set in the W3C standards.
Let’s test this out by trying to validate the code
for this Web site (www.webbedenvironments.
com/css_dhtml_ajax).
To use the W3C’s CSSValidator:
1.Point your Web browser to jigsaw.w3.org/
css-validator/(Figure A.2).
2.Choose the method you want to validate
your CSS).
You can enter a URL (by URI),enter the
CSS code directly in a form(with a text
area),or upload your files (by file upload).
In this example,you’ll submit a URL.
3.Enter the URL of the Web site or style
sheet (Figure A.3).
I recommend entering the exact URL of
the style sheet.
6
Online Resource A
ValidatingYourCSS
Figure A.2 The W3C’s CSS Validator.
Figure A.3 I want the Validator to check this Web site
(I gotta practice what I preach).
4.The validation takes only a few seconds.
You’re given a report of errors and other
possible problems with your CSS
(Figure A.4).

Tips

Anyone who creates a Web page can dis-
play the Made with Cascading Style
Sheets icon (Figure A.5);however,only
pages that pass muster with the CSS
Validator should display the W3C CSS
validation icon (Figure A.6).

Although you don’t have to have valid
CSS for the browser to display your code,
the validation process often helps locate
code errors.
7
Debugging Your Code
ValidatingYourCSS
Figure A.4 Everything is looking good.Any problems
will be reported,specifying what is wrong and where,
and suggesting fixes.
Figure A.5 Say it loud,say it
proud:Made with CSS.
Figure A.6 If your CSS passes
muster,you too can display
the Valid CSS icon.
TroubleshootingJavaScript
Although JavaScript is not a true program-
ming language like Java,you must still use
logic to construct the actions that should
take place.Things inevitably go wrong.
Unlike CSS,however,JavaScript doesn’t require
you to eyeball the code to figure out what’s
wrong.Most browsers display an error mes-
sage that details what went wrong and where.
To viewJavaScript errors:

In Mozilla based browsers,type
javascript:
in the browser’s location
bar (Figure A.7) or choose Tools >
JavaScript Console.A window like the
one shown in Figure A.8 appears.It
displays any JavaScript errors that
occur in open windows.

In Internet Explorer,JavaScript errors
appear as soon as they occur,unless you
set your preferences not to show errors
(Figure A.9).
After the error has been detected and
located,you can check the code and even
use JavaScript to track down the problem
(Figure A.10).
8
Online Resource A
TroubleshootingJavaScript
Figure A.7 Type
javascript
:
in the location bar.
Figure A.8The error screen in Firebird,which is a
Mozilla-based browser.
Figure A.10 These errors commonly crop up in JavaScript.Don’t let this happen to you.
Figure A.9 An error message in Internet Explorer.
Missing

Missing
()
If alert appears then var1 =5
Missing
}
myname
is not the
same as
myName
Value1
may or may not exist
Alert displays the variable’s
current value
Missing third value
For errors,check the following
Look for these common problems:

Do you have matching curly brackets
(
{}
) for every instance?If either end is
left out,the script will fail.

Do you have matching quotes (


) for
every instance?If you don’t close a
quote string,the script will fail.

Have all referenced objects and vari-
ables loaded before being referenced?
This situation is called a “timing prob-
lem.” If a page in one frame attempts to
reference a nonexistent object or an
object that simply hasn’t finished loading
yet,the script will fail.One way around
this problemis to test for the existence
of the object or variable before trying to
performan action on it,as follows:
if (document.nextFrame.value1)
➝ { document.nextFrame.value1 = x}

Have you used a reserved word for a
variable?Certain words,such as new,
have a special meaning for JavaScript and
cannot be used for variables.You can use
derivations of these words,such as
newObject
;
you just can’t use the exact
word.See Online Reference C on this
Web site for a list of reserved words.

Do your variable names match?Atypo
in a variable name may cause a function
to fail or act unpredictably,but JavaScript
is also case-sensitive,so even a difference
in a letter’s case will cause the function
to think that it is dealing with different
variables.The variable
noWhere
,for exam-
ple,is completely different from
nowhere
.
9
Debugging Your Code
TroubleshootingJavaScript
continues on next page

Have you placed all the necessary val-
ues in the function call,and are they
in the right order?If not,your JavaScript
may fail or act unpredictably.You wouldn’t
believe how many hours I’ve wasted
debugging code only to realize that I
simply placed my variables in the wrong
order when I referenced the function.

Do your
if
statements have paren-
theses around their arguments?
I forget the parentheses all the time.Your
if
statements need to have the following
structure:
if (argument) doThis;

Is your JavaScript running the correct
code?Sometimes code that you expect
to run doesn’t run for some reason.The
best way to test this situation is to put
alerts in strategic places in the code to
show what’s running (and what is not).
Place the following line in your code where
you think the code might not be running:
alert (‘Got Here!’);
If the code is running,the alert should
appear.

Are your variables getting the right
values?Your variables may not get the
values you expect themto get.Place an
alert immediately after a variable to test
its value,as follows:
alert (‘My Name is ‘ + myVariable);

Is your logic sound?Simply stated,you
need to make sure that what you’ve pro-
grammed makes sense.If actions occur
out of order for the desired effect,things
will go wrong.Trace through your code as
though you were the computer running
it,keeping track of what variables have
what values at a given time and whether
the correct actions are executed at the
correct time.
10
Online Resource A
TroubleshootingJavaScript
11
Debugging Your Code
TroubleshootingJavaScript

Tips

Although you can use double quotes (
“”
)
or single quotes (
‘’
) in your JavaScript
and HTML,I recommend sticking with
single quotes for JavaScript and double
quotes for HTML.This practice will help
prevent a lot of confusion.I make fewer
programming errors if I stick to this
simple rule.

Although you don’t have to use it,
JavaScript has an accepted way of creat-
ing variable names,often referred to as
“JavaScript notation.” Simply put,if you
have multiple words in a variable,the
first word is lowercase,and the first let-
ter of each subsequent word is upper-
case,with other letters in lowercase.So
my last name—Cranford Teague—would
be
cranfordTeague
in JavaScript notation.
12
Online Resource A
TroubleshootingJavaScript
The Web Developer Toolbar
If you’re developing Web pages for Mozilla browsers,such as Firefox,Camino or Flock,the
Web Developer Toolbar fromchrispederick.comis indispensable (chrispederick.com/work/
webdeveloper/).
This easy-to-install extension adds a list of drop-down menus underneath your Bookmarks
toolbar (Figure A.11),and includes the following:

Disable.Disable just about any of the code in a Web site to help find problems.

Cookies.Clear,view and disable cookies.

CSS.Disable,view or even edit style sheets to test different ideas on a page on the fly.

Forms.Display all formdata—even hidden passwords.

Images.Display or hide images (including backgrounds) or see any information about
them.

Information.Get almost any information about any element in the page displayed
directly on the screen.

Miscellaneous.Show rulers,rollover information about the screen,even edit the HTML
on the fly to test ideas.

Outline.Show an outline around any element on the page you choose.

Resize.Resize the browser window to any width and height you need.

Tools.Validate your code,get speed reports,and open the JavaScript or Java inspectors.

ViewSource.See the code used to create the page.
Figure A.11 The Web Developer Toolbar in action.The displayed page has its block
elements outlined,and also shows the tags used to create the block element
while a newtab is running CSS validation.
Cross-Browser
Conundrums
HTML,CSS,JavaScript,and the Document
Object Model are all referred to as inter-
preted code.That is,every browser that can
understand these technologies follows a set
of rules to help it translate and display the
code you set up.Unfortunately,these trans-
lations can vary slightly or enormously from
browser to browser.
Afriend of mine was experimenting with CSS
in his Web site,and the
line-height
was set
to
normal
in every rule (see “Adjusting Text
Spacing” in Chapter 4).Although this setup
looked perfectly fine in Internet Explorer 5
for Windows,in Internet Explorer 5 for the
Mac,the headlines (which were multiple
lines of large text) overlapped.Why?
Apparently,when Microsoft programmers
created Internet Explorer for Windows,they
interpreted
normal
to mean that the browser
should apply the current font size being
used at that point in the page.Conversely,
the Mac development teaminterpreted
normal
as meaning the default font size for
the page.Thus,in Windows,the
line-height
would have to be the same as the font size of
the text being presented.But in the Mac
version,the
line-height
would more than
likely be around 12 points,causing the 36-
point text lines to overlap (Figure A.12).
13
Debugging Your Code
Cross-BrowserConundrums
Figure A.12 In Internet Explorer for Windows (top),the
header looks fine with the
line-height
set to
normal
.However,in the Mac version (bottom),the
lines of text knock together.
continues on next page
14
Online Resource A
Cross-BrowserConundrums
I run across these types of problems all the
time.Many of themaren’t really bugs—
they’re just slightly different ways that one
browser interprets HTML,CSS,or JavaScript
compared with other browsers,in much the
same way that words (even in the same lan-
guage) may mean different things in differ-
ent countries (see the sidebar “A Matter of
Interpretation:Pants or Trousers?”).Although
this situation usually isn’t life threatening,it
can be confusing,not to mention annoying.
You can’t do much to fix these problems—
unless you want to reprogramthe browsers
and install themon all the computers of the
people who will be viewing your site.But
you can work around the problems.
Cross-browser workarounds:

Adjust your code.In my friend’s case,
he didn’t need the
line-height:normal
definition,so he took it out.The layout
then looked fine in both browsers.

Tailor your code to the OS,the brows-
er,or both.I showed you how to do this
for CSS in “Using Conditional Comments
to Fix CSS in Internet Explorer” in
Chapter 2,but you can also use browser
and OS detection to deliver tailored code
(see Chapter 13 for more details).

Rethink the method you’re using to
create the page.Because older versions
of Internet Explorer do not support the
dynamic pseudo-classes in anything but
link tags,you may have to rethink using
:hover
in tables or other elements if
you are relying on themto convey impor-
tant information.

Live with it.Some problems are just not
worth the effort of fixing them.If a prob-
lemis small—for instance,one browser
puts a few extra line breaks after an
<h1>
header,while another browser does not—
you can be doing far better things with
your time than trying to offset the prob-
lemin both browsers.
A Matter of Interpretation:
Pants or Trousers?
While I was a student living in London,I
frequented a local pub (one of about six
within a five-minute walk of my flat) on
the banks of the Thames River.On one
occasion,I was talking to some friends,
and a drunken rugby player who was
standing next to us sloshed lager on me.
After the third time this happened,I stood
up and started yelling at him,“Hey,do you
want to clean my pants?” Unfortunately,I
forgot that to a Brit,the word pants means
underwear,whereas to a “Yank,” it means
trousers.He and his six mates,who were
not familiar with this little linguistic
twist,proceeded to try to throw me into
the Thames.Make no mistake about it—
misinterpreting a word can mean the dif-
ference between life and death.