SVGImageElement-load-and-error-events.html 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. <!DOCTYPE html>
  2. <script src="../include.js"></script>
  3. <script type="text/javascript">
  4. const SOURCES = [
  5. "data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==", // Valid
  6. "file:///i-do-not-exist", // invalid
  7. "https://something.invalid", // invalid
  8. ];
  9. const runTest = (source) => {
  10. const svgNamespace = "http://www.w3.org/2000/svg";
  11. const image = document.createElementNS(svgNamespace, "image");
  12. const svg = document.createElementNS(svgNamespace, "svg");
  13. svg.appendChild(image);
  14. document.body.appendChild(svg);
  15. return new Promise((resolve) => {
  16. image.addEventListener("load", () => {
  17. resolve(`SUCCESS: "${source}"`);
  18. document.body.removeChild(svg);
  19. });
  20. image.addEventListener("error", () => {
  21. resolve(`FAIL: "${source}"`);
  22. document.body.removeChild(svg);
  23. });
  24. image.setAttributeNS("http://www.w3.org/1999/xlink", "href", source);
  25. });
  26. };
  27. asyncTest(done => {
  28. const promises = SOURCES.map(source => runTest(source));
  29. Promise.allSettled(promises)
  30. .then(results => {
  31. results.forEach(result => println(result.value));
  32. })
  33. .finally(done);
  34. });
  35. </script>