controljs icon indicating copy to clipboard operation
controljs copied to clipboard

Do not override document.write

Open GoogleCodeExporter opened this issue 9 years ago • 1 comments

Please provide any additional information below.

I'm trying to migrate a large real-world (yes, with ads and Google Maps) 
website to ControlJS and I've found out that it overrides document.write 
unconditionally and assumes that all scripts on the page are type="text/cjs". 
Now, I don't believe that it's possible to write a custom, asynchronous, fully 
compliant document.write function, so I don't really see why ControlJS tries to 
do this. From my point of view, the main goal of ControlJS is to improve the 
loading experience of existing websites, which might be coded in a non-ideal 
way, with inline scripts and everything. Because, seriously, on a 
well-engineered website such a library wouldn't be useful. I did a quick patch 
in my copy of ControlJS to a) disable CJS.docwrite and b) to actually check the 
type value in CJS.findScripts. Works quite well so far - the old-school 
3rd-party scripts are loaded in a blocking way, and my scripts are loaded with 
CJS.

You might also consider adding a data-cjsasync="false" attribute. By 
introducing such an attribute, I guess it would be possible to process all 
scripts with CJS _and_ toggle CJS.docwrite on a script-by-script basis. For 
example, GMaps do use document.write, but in a CJS-compatible manner, whereas 
most ad networks have such perverted scripts that it won't be possible to write 
a reasonable custom document.write for them...

Original issue reported on code.google.com by [email protected] on 7 Jan 2011 at 5:09

GoogleCodeExporter avatar Mar 16 '15 22:03 GoogleCodeExporter

I whole heartedly agree. I am also converting a huge real world international 
news site with ControlJS and the blanket document.write override is killing me. 
I would much rather SHUT IT OFF and have the optimization ONLY on scripts I 
specify.

Leonid, I'm going to make the same alterations and would love to see that 
changes you made as a sanity check against what I'm doing.

If you read through the script, there are so many comments about things still 
"TODO" for document.write a data-cjsasync="false" would be a wonderful addition 
to the script and make it much more usable until the document.write replacement 
is more polished. 

Original comment by [email protected] on 21 Sep 2011 at 12:29

GoogleCodeExporter avatar Mar 16 '15 22:03 GoogleCodeExporter