Closed Bug 361804 Opened 18 years ago Closed 18 years ago

"Node was not found" WITHOUT .xhtml extension

Categories

(Firefox :: File Handling, defect)

x86
Windows XP
defect
Not set
major

Tracking

()

RESOLVED INVALID

People

(Reporter: trent.nospam, Unassigned)

Details

User-Agent:       Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0
Build Identifier: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0

This is a really odd bug.  The nodes do actually get found, but this error occurs when I try and call element.insertBefore() in javascript.  I've printed out the attributes for the refElement, thereby proving that it is actually getting the element, yet insertBefore() still complains.


Reproducible: Always

Steps to Reproduce:
1. Click the "Add Comment" link.

Actual Results:  
an error appears in the console as follows...
Error: uncaught exception: [Exception... "Node was not found"  code: "8" nsresult: "0x80530008 (NS_ERROR_DOM_NOT_FOUND_ERR)"  location: "file:///C:/Documents%20and%20Settings/trenta/Desktop/temp/APL%20Dispatcher.html Line: 46"]

Expected Results:  
A comment TR/TD/form/input should be added.  In the case where the file is named Something.xhtml, it works just fine.

Below is the w3c validated proof XHTML.  Save it as a .xhtml on the first try, and you will see that it works.  Save it as .html on the second try, and you will find that it does not work.  I would expect the browser to be getting the DOCTYPE from the DOCTYPE declaration, not the file extension.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>Example Broken</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

    <script type="text/javascript">
function addComment(commentRowID, jobTableID)
{
    var commentTR;
    var jobTable;
    var newTR;
    var newTD;
    var newForm;
    var input;
    jobTable = document.getElementById(jobTableID);
    newTR = document.createElement("tr");

    newForm = document.createElement("form");

    input = document.createElement("input");
    input.name = "something";
    input.value ="enter your comment here";
    input.type = "text";
    input.className = "realtime_box";
    input.maxlength = "255";
    input.size = "50";
    newForm.appendChild(input)

    newTD = document.createElement("td");
    newTD.colSpan = '4';
    newTD.appendChild(newForm);
    newTR.appendChild(newTD);
    newTD = document.createElement("td");
    newTR.appendChild(newTD);

//    jobTable.replaceChild(newTR, commentTR);
//    jobTable.appendChild(newTR);
//    alert (commentTR.id);
//    commentTR.display = "none";
//    jobTable.removeChild(commentTR);
    commentTR = document.getElementById(commentRowID);
    jobTable.insertBefore(newTR, commentTR);
//    alert(jobTable.lastChild);
//    newTR = commentTR.cloneNode(true);
//    newTR.id = undefined;
//    jobTable.removeChild(commentTR);
//    jobTable.appendChild(newTR);
//    jobTable.appendChild(commentTR);
}
    </script>
    
  </head>
<body>
  <table class="special" id="job_328">
    <tr id="last_328" class="comments print_hidden">
      
      <td colspan="4" class="comment_list" align="center">

        <a href="javascript:addComment('last_328', 'job_328');">Add Comment</a>
      </td>
    </tr>
  </table>
</body>

</html>
Works for me when I set the .html as application/xhtml+xml on the web server.
I think the mimetype overriding the doctype is correct behaviour.
Oh, that's a possibility.  I always assumed that the DOCTYPE was the be all end all of the document type.  Hmmm.

Ahhh, if that's the case, I guess I have to set my own content-type.  Because this is what it is setting...
Content-Type: text/html

Sorry about that.

(In reply to comment #1)
> Works for me when I set the .html as application/xhtml+xml on the web server.
> I think the mimetype overriding the doctype is correct behaviour.
> 

Marking as invalid per comment 2, assuming someone understands why the insertBefore call fails when the document is sent as text/html.  (My guess is that when the document is sent as text/html, the parser adds a TBODY element between the TABLE and TR elements, making it so the TR isn't a direct child of the TABLE.)
Status: UNCONFIRMED → RESOLVED
Closed: 18 years ago
Resolution: --- → INVALID
Very good guess.  Yes, it was adding a tbody, and it is now working, since I put in the correct content-type header.
You need to log in before you can comment on or make changes to this bug.