Can't append a child to page from a Chrome extension

appendchild, dom, google-chrome, google-chrome-extension, javascript

Solution

You are assigning the return value of `html` method to `divNode`

As you can find on jQuery documentation, `html` method used as a setter return the jQuery object to allow for chained calls.

So, you are trying to append a jQuery object to a DOM node, which is not valid.

What you have to do is:

var divNode = $('<div>').attr('id','layoutVsDesign').html('test');        
$("body").append( divNode ); //append a jQuery object using jQuery method

or otherwise:

var divNode = $('<div>').attr('id','layoutVsDesign').html('test');        
document.body.appendChild( divNode[0] ); //append a DOM node with DOM method

Problem

This is the simplified code, it's stops working after the appendChild line: ``` $preview = { designImg: '', thePage: null, designPreviewer: null, init: function(){ var divNode = $('<div>').attr('id','layoutVsDesign').html('test'); document.body.appendChild( divNode ); alert('I never happen'); this.designPreviewer = document.body.find('#designPreviewer'); } }; $(document).ready(function(){ $preview.init(); }); ``` Any idea what I am missing? I also tried: ``` chrome.extension.getBackgroundPage().appendChild() ``` With pretty much the same result -EDIT- Using content scripts: works (takes a string): ``` chrome.tabs.executeScript({ code: 'document.body.style.display = "none"' }); ``` But ``` chrome.tabs.executeScript({ code: 'document.body.appendChild("<div>tttttttesttt</div>")' }); ``` or ``` chrome.tabs.executeScript({ code: 'document.body.appendChild(node[0])' }); ``` Won't work, how can I pass the node to the `code` parameter?

Original source