The SVG script element allows to add scripts to an SVG document.

Note: While SVG's script element is equivalent to the HTML <script> element, it has some discrepancies, like it uses the href attribute instead of src and it doesn't support ECMAScript modules so far (See browser compatibility below for details)


<svg viewBox="0 0 10 10" xmlns="http://www.w3.org/2000/svg">
  // <![CDATA[
  window.addEventListener('DOMContentLoaded', () => {
    function getColor () {
      const R = Math.round(Math.random() * 255).toString(16).padStart(2,'0')
      const G = Math.round(Math.random() * 255).toString(16).padStart(2,'0')
      const B = Math.round(Math.random() * 255).toString(16).padStart(2,'0')
      return `#${R}${G}${B}`

    document.querySelector('circle').addEventListener('click', (e) => {
      e.target.style.fill = getColor()
  // ]]>

  <circle cx="5" cy="5" r="4" />



This attribute defines CORS settings as define for the HTML <script> element. Value type<string>; Default value: ?; Animatable: yes


The URL to the script to load. Value type: <URL> ; Default value: none; Animatable: no


This attribute defines type of the script language to use. Value type<string>; Default value: application/ecmascript; Animatable: no


The URL to the script to load. Value type: <URL> ; Default value: none; Animatable: no

Global attributes

Core Attributes

Most notably: id

Styling Attributes
class, style
Event Attributes

Global event attributes, Document element event attributes

Usage notes

Permitted contentAny elements or character data


Scalable Vector Graphics (SVG) 1.1 (Second Edition) (SVG)
# ScriptElement

Browser compatibility

BCD tables only load in the browser

See also