1 2 3 4 5 6 7 8 9
let browser = document.getElementById('tabmail').getBrowserForSelectedTab(); let doc = browser.contentDocument; dump("\n\n\n\nXXXXXXXXXX\n"); dump("DOM Content loaded for " + doc.location + "\n"); var topBar = document.createElement("div"); topBar.innerHTML = "We got it!!!!!"; dump("iB = "+doc.body.insertBefore+"\n"); dump("fC = "+doc.body.firstChild+"\n"); doc.body.insertBefore(topBar, doc.body.firstChild);
I got the following error:
WARNING: NS_ENSURE_SUCCESS(rv, rv) failed with result 0x80530009: file /Volumes/Devel/thunderbird/src-central/mozilla/content/base/src/nsNodeUtils.h, line 304 WARNING: NS_ENSURE_SUCCESS(rv, rv) failed with result 0x80530009: file /Volumes/Devel/thunderbird/src-central/mozilla/content/base/src/nsGenericElement.cpp, line 4077 -- Exception object -- [snip…] + message (string) 'Operation is not supported' + result (number) 2152923145 + name (string) 'NS_ERROR_DOM_NOT_SUPPORTED_ERR'
Poking around a little, it seemed like I had reasonable things for the insertBefore method, the firstChild attribute, and the topBar variable, and so since it was late, and I couldn't see what I had done wrong, I went to bed.
If you're modifying some content DOM from chrome code, you need to make sure the child you're appending was created using the unprivileged document, not the global document.// This is chrome code, this is wrong because the span is now chrome // and you're trying to insert it into content myContentNode.appendChild(document.createElement("span")) // This is right, appending a content node to another content node myContentNode.appendChild(myContentNode.ownerDocument.createElement("span"))
I've hit this issue at least three times when upgrading stuff for Gecko 2.0. Might be what you're looking for .
And sure enough, when I changed var topBar = document.createElement("div"); to var topBar = doc.createElement("div"); , it all started working beautifully.
Thank you, Jonathan!