Don't know if the problem is the same, but a few years ago I did a custom ad network (because I didn't like DFP) to serve custom banners and Adsense ads. And I had a problem with document.write()
too.
The problem was solved overriding the document.write
function. Kinda tricky, but worked: before loading the adsense ad, the document.write
function is replaced with a custom function that inserts the content into an element, instead of writing it to the dom directly. After inserting the content, the original document.write
function is restored.
That is, a one time function replacement.
Here is some code:
var originalFunction = document.write;
overrideDocumentWriteFunction = function(container) {
document.write = function(content) {
container.innerHTML = content;
document.write = originalFunction;
};
};
And I used it like this:
var div = document.getElementById('adPlacement');
overrideDocumentWriteFunction(div);
var script = document.createElement('script');
script.type = 'text/javascript';
script.innerHTML = '{adsense script content}'
document.body.appendChild(script);
This way the document.write
function was customized to ensure the Adsense script worked after the page was loaded.
I haven't tried DFP on NodeBB but maybe this helps.