As near as I can tell, if document.write is added to a CRM onload method the entire method is disabled and not served to the client.
document.write is usually a bad idea, but it is quite useful when including an external javascript page, because it blocks while waiting for the page to load.
In CRM you have two choices for including external files:
- Directly manipulate the DOM, which does an async load, which means your scripts might not load in order. If you load jquery first and then something that depends on jquery, the something that depends on jquery might fail.
- Or, you can use window.execScript, which is IE specific but synchronous. See http://danielcai.blogspot.com/2010/02/another-talk-about-referencing-external.html – but add a ?version=whatever or ?version=Math.random parameter to give you some control over caching as versions change.
(Disclaimer: including external pages in CRM can lead to problems with the outlook client working offline – you need to include them in your /isv folder and distribute them via a separate installer to your users for them to continue to have offline functionality. Javascript inside the entity is automatically synced by CRM to offline clients, but files in /isv aren’t.)
You could also take a look at CrmExt, which is a fully featured toolkit for handling these sorts of issues: http://blogs.msdn.com/b/kbowling/archive/2010/04/30/crmext-js-an-external-javascript-loader-for-dynamics-crm.aspx