I am using Groovy 1.8 XML MarkupBuilder to build an HTML page which includes a <script> tag.
When I load the page in Firefox 18 I see a blank page instead of the expected results.
This seems to be due to the generated <script> tag not having a complementary </script> tag,
even though there is no content to warrant the </script> tag.
(See: https://stackoverflow.com/questions/69913/why-dont-self-closing-script-tags-work )
Sample Groovy code:
def builder = new groovy.xml.MarkupBuilder( out )
builder.html {
  head {
    script( type:'text/javascript', src:'//example.com/example.js' )
  }
  body {
    p("Hello...Newman.")
  }
}
If I examine the (blank) rendered page's HTML using Firefox's "View Page Source" (Ctrl-U), I see:
<html>
  <head>
    <script type='text/javascript' src='//example.com/example.js />
  </head>
  <body>
    <p>Hello...Newman.</p>
  </body>
</html>
Looking closely, I see the '/' on the <script ... /> tag is rendered in red,
and the hover-over text on the '/' says "Self-closing syntax ("/>") used on a non-void HTML element. Ignoring the slash and treating as a start tag."
So, how do I generate valid HTML <script> tags using Groovy XML MarkupBuilder ?
If you define some empty content, then the script tag will have a separate closing tag:
script( '', type:'text/javascript', src:'//example.com/example.js' )
                        Alternatively you could use
script(type:'text/javascript', src:'//example.com/example.js){mkp.yield("")}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With