Internet explorer SVG';s node.getScreenCTM()方法在IE 9中失败

Internet explorer SVG';s node.getScreenCTM()方法在IE 9中失败,internet-explorer,exception,svg,Internet Explorer,Exception,Svg,我在SVG中使用了一些javascript来观察鼠标事件,需要将鼠标坐标转换为SVG空间中的实际坐标(使用viewBox和其他转换) 此代码适用于WebKit/Gecko浏览器: function transformEventCoordsToNodeCoords(evt,node) { var point = document.documentElement.createSVGPoint(); point.x = evt.clientX; point.y = evt.clientY;

我在SVG中使用了一些javascript来观察鼠标事件,需要将鼠标坐标转换为SVG空间中的实际坐标(使用viewBox和其他转换)

此代码适用于WebKit/Gecko浏览器:

function transformEventCoordsToNodeCoords(evt,node)
{
  var point = document.documentElement.createSVGPoint();
  point.x = evt.clientX;
  point.y = evt.clientY;

  var ctm = node.getScreenCTM();
  return point.matrixTransform(ctm.inverse());
}
在IE 9中,getScreenCTM()引发异常:

Unexpected call to method or property access.
我在网上找到的示例代码表明我的代码是正确的,我甚至发现一个SVG似乎使用了完全相同的技术,它在IE 9中工作:

有人知道我的代码失败的原因吗

注意:
节点
变量是一个

​​
PS:将此SVG上载到可公开访问的服务器是很困难的。

我发现了问题

在IE 9中,您不能在父节点为
display:none的节点上调用
getScreenCTM()

如果查询节点为
显示:无
那么可以调用
getScreenCTM()
,但不能在隐藏元素的子节点上调用它


我的解决方法是从
display:none切换至<代码>不透明度:0getScreenCTM()
,然后立即将其更改回
display:none

是否检查了节点变量是否真的是IE9中SVGRCTELEMENT类型的对象?是的,我通过console.log()来确定。IE 9给出了:
LOG:[object SVGRectElement]
。另外,
console.log(node.getScreenCTM)
显示该方法确实存在(函数{internal code})或其他东西。您还可以设置
可见性:hidden
,它应该可以工作(至少根据规范)。
<rect id=​"tooltip_box" x=​"698.7705078125" y=​"278.19676208496094" rx=​"20" ry=​"20" width=​"310" height=​"165" class=​"tooltip_box_region_level_1">​</rect>​