Javascript SVG foreignObject未在Chrome中显示

Javascript SVG foreignObject未在Chrome中显示,javascript,html,firefox,google-chrome,jquery-svg,Javascript,Html,Firefox,Google Chrome,Jquery Svg,我有一个SVG元素,其中包含一个包含div的foreignObject。然后在我的js中执行以下操作: $("#wrapper>svg>foreignObject>div").sparkline(data); 这在div中创建了一个画布。当我查看两个浏览器的firebug html代码时,它们是: 火狐: <svg> <foreignObject width="20" height="20" x="10" y="-10"> <

我有一个SVG元素,其中包含一个包含div的foreignObject。然后在我的js中执行以下操作:

$("#wrapper>svg>foreignObject>div").sparkline(data);
这在div中创建了一个画布。当我查看两个浏览器的firebug html代码时,它们是:

火狐:

<svg>
    <foreignObject width="20" height="20" x="10" y="-10">
       <div>
          <canvas style="display: inline-block; width: 18px; height: 19px; vertical-align: top;" width="18" height="19"></canvas>
       </div>
    </foreignObject>
</svg>

铬:

<svg>
    <foreignobject width="20" height="20" x="10" y="-10"/>
<svg>

在chrome中,它甚至不显示div。我创建div的方式是

nodeEnter.append("foreignObject")
  .attr("width", "20")
  .attr("height", "20")
  .attr("x", "10")
  .attr("y","-10");

$("#wrapper>svg>foreignObject").append("<div></div>");
nodeEnter.append(“外来对象”)
.attr(“宽度”、“20”)
.attr(“高度”、“20”)
.attr(“x”、“10”)
.attr(“y”和“-10”);
$(“#包装器>svg>外来对象”).append(“”);
Firefox正在按照我的预期工作。但铬却不行。有人有什么建议吗


另外,我认为部分问题在于chrome firebug HTML输出显示“foreignobject”,而Firefox显示“foreignobject”的方式与我添加的方式相同。

您需要将HTML主体作为foreignobject的子元素。一旦你有了它,你就可以在身体里放任何东西。

为了增加对话,这里有一些标记。Chrome和Firefox表现不同,这些样式标记消除了差异(添加到html重置?)。显然,您不需要html主体,而需要标记上的名称空间引用xmlns,无论是
body
还是
div
。此外,您可能需要考虑SVG <代码>开关< /C>标签来测试支持的特性。

<!doctype html><html><body>

<svg xmlns="http://www.w3.org/2000/svg" width="500px" height="300px">
  <foreignObject width="100" height="57">
    <div xmlns="http://www.w3.org/1999/xhtml" style="position:relative;
         width:100px;height:57px;overflow:hidden;font-family:Arial;
         font-weight:400;font-size:12px;line-height:100%;">
           Lorem ipsum dolor sit amet, consectetur adipiscing egplit, sed do eiusmod
           tempor incididunt ut labore
    </div>
  </foreignObject>
</svg>

</body></html>

这是一个很好的例子
临时劳工保险

可能值得更新,因为Chrome似乎已经改变了它的行为,子元素现在必须被包装——奇怪的是,Edge对这两种方式都不在乎。这两种浏览器都不需要名称空间(但其他浏览器可能仍然很挑剔)。我发现chrome的主要问题只是需要忽略
foreignObject
中的
requiredExtensions
属性。