Side navigation
#6007 closed bug (patchwelcome)
Opened February 02, 2010 03:24AM UTC
Closed April 17, 2011 12:13AM UTC
Last modified March 13, 2012 11:19PM UTC
jQuery gives errors when called externally from a SVG
Reported by: | digijin | Owned by: | john |
---|---|---|---|
Priority: | low | Milestone: | 1.next |
Component: | core | Version: | git |
Keywords: | xml svg | Cc: | |
Blocked by: | Blocking: |
Description
in a svg file if I include a link to jquery with a tag like
<script type="text/javascript" xlink:href="jquery/jquery-1.4.min.js"/>
with jQuery 1.4 I get the error
Error: d.style is undefined
Source File: /jquery-1.4.min.js
Line: 33
using 1.3.2 I get the error
Error: K.style is undefined
Source File: /jquery-1.3.2.min.js
Line: 19
I assume the error has something to do with the document type as I use this same library in many places and this is the only place it raises an error. I can replicate this in firefox 3.5 with all addons disabled.
Attachments (0)
Change History (12)
Changed February 02, 2010 01:47PM UTC by comment:1
component: | unfilled → core |
---|---|
milestone: | 1.4.2 → 1.5 |
owner: | → john |
status: | new → assigned |
Changed August 16, 2010 09:53PM UTC by comment:2
Verified with <script xlink:href="http://code.jquery.com/jquery-1.4.2.js"/>
div.style.display = "none"; // div.style is undefined LINE 834
It's in the anonymous "main" function when creating the general-purpose div.
Changed October 19, 2010 06:45AM UTC by comment:4
milestone: | 1.4.4 → 1.5 |
---|
Changed October 22, 2010 06:29PM UTC by comment:5
priority: | major → low |
---|
Reset priority to low, per triage docs
Changed November 21, 2010 04:43AM UTC by comment:6
keywords: | svg → xml svg |
---|
Changed November 21, 2010 04:48AM UTC by comment:7
blocking: | → 7584 |
---|
Changed February 04, 2011 03:03PM UTC by comment:8
With jquery 1.5 the error changed to "b.style is undefined" but it's the same and still there.
Please? This makes jquery completely unusable inside svg!
Changed February 04, 2011 11:03PM UTC by comment:9
it is possible to use jquery with a svg, but you need to be a bit tricky and embed it in the parent of the svg and call it from there. I dont have any examples handy, but I have done it before.
Changed February 05, 2011 01:09AM UTC by comment:10
milestone: | → 1.next |
---|---|
version: | 1.4.1 → git |
Changed March 28, 2011 08:24PM UTC by comment:11
When the document element is svg, there are at least 2 problems and 2 subproblems to solve:
1. In the immediate function for jQuery.support, call createElementNS for XML documents.
jQuery 1.5.2RC1 has 4 occurrences of createElement for div, 1 for select, 1 for option, and 1 for script.
Pseudocode for the first occurrence:
var isXML = jQuery.isXMLDoc(document), div = isXML ? document.createElementNS("http://www.w3.org/1999/xhtml", "div") : document.createElement("div");
Subproblem: Neither jQuery.isXMLDoc nor Sizzle.isXML are defined at this point in the code.
2. In the anonymous function for W3C box model and so on, insert a body element in a foreignObject element in the svg document element:
Pseudocode:
var ..., foreignObject, // is document.documentElement always defined at this point? isSVG = document.documentElement.namespace === "http://www.w3.org/2000/svg"; if ( !body ) { if ( isSVG ) { body = document.createElementNS("http://www.w3.org/1999/xhtml", "body"); foreignObject = document.createElementNS("http://www.w3.org/2000/svg", "foreignObject"); foreignObject.setAttribute("visibility", "hidden"); // is this necessary? foreignObject.setAttribute("x", 0); // the following are necessary foreignObject.setAttribute("y", 0); foreignObject.setAttribute("width", 1); foreignObject.setAttribute("height", 1); foreignObject.appendChild(body); document.documentElement.appendChild(foreignObject); } else { return; } } // Check for box model, and so on if (isSVG) { /* include body and foreignObject in the clean up */ }
Subproblem: The anonymous function is never called because the ready function makes sure body exists, but body doesn't exist if the document element is svg.
Pseudocode:
if ( !document.body && !jQuery.isXMLDoc(document) ) { return setTimeout( jQuery.ready, 1 ); }
Changed April 17, 2011 12:13AM UTC by comment:12
resolution: | → patchwelcome |
---|---|
status: | assigned → closed |
See thoughts in #7584.
This is something that we can check in to for jQuery 1.5 (when we look at other SVG/XHTML/XML issues).