GoJS makeSVG没有生成正确的HTML SVG对象

时间:2015-08-07 07:47:39

标签: javascript html internet-explorer svg gojs

我一直在使用Diagram.makeSVG()方法从我的图表中生成SVG。之后我使用此代码将SVG添加到新的空白选项卡(diagram是我的图表对象):

function print() {
  var newTab = window.open(),
      svg  = aclDiagram.makeSVG({
        some: options
      });
  newTab.document.body.appendChild(svg);
}

它在Chrome和Firefox中运行良好。 它在IE11中无效。

我做了一些调试,发现它不仅仅是 Browsers故障。当生成SVG GoJS在调试器中查看它的类型时没有生成正确的SVG(在我看来)

SVGSVGElement

正如我所说,它在FF和Chrome中运行良好。我认为这是由于Chrome和Firefox容忍非官方HTMLElement类型,并且说“嗯,让我们尝试添加它”,与IE 11相比,“Wowowow,没有办法添加这个元素,这甚至不是某种类型HTMLElement“ 或者我在这里弄错了什么?

我现在正在尝试找到一种解决方法,使其在IE中运行。 但是,我不知何故找不到改变对象类型的方法。

有什么建议吗? 提前谢谢。

3 个答案:

答案 0 :(得分:2)

好的,经过无休止的研究,我现在可以说:“互联网探索表现得很奇怪。经常”。我们必须处理的问题的起源并不像我对GoJS的预期,而是因为Internet Explorer的某些可疑(个人意见)功能。

游戏名称:层次结构

使用var newTab = window.open()打开新标签时,Internet Explorer会打开一个全新的工作区。这意味着newTab变量现在是新的window,具有自己的document和安全限制。

GoJS'makeSvg()方法在窗口上生成SVG。无法指定它在哪个窗口生成SVG。我想你可以看到我要去哪里。通过说

newTab.document.body.appendChild(svg);

安全限制阻止我将元素添加到不希望的位置。 Big E 只是说“不”,中断例程并抛出异常。通过它自己。但是,嘿,你可能想知道:“这个例外在哪里?”我不完全理解它,但不知何故它直接从IE到IE,IE得到它全部错误并向控制台抛出一个异常说一个异常(“我不能将该元素添加到窗口中它不是为“”而创建的。但是IE并没有给我一个它无法处理的例外。它只打印出有关未被捕获的异常的异常。 的困惑?我是。

那么我们如何解决这个问题呢?

  1. 声明一个空的HTMLElement(div),您可以将SVG放入第一个窗口(而不是新选项卡)。
  2. 将SVG添加到刚刚创建的div
  3. 获取div的{​​{1}}并将其添加到新标签页。
  4. 因此,您不是在新标签页中添加HTMLElement,而是添加字符串。

    我可能会忽略一些更聪明的解决方案。但是,以下代码是唯一适用于我的代码,因为它能够超出IE的“安全”功能。

    innerHTML

答案 1 :(得分:1)

这似乎在IE Edge中运行良好:

var svg = myDiagram.makeSvg({
    scale: 0.5
  });
svg.style.border = "1px solid black";
document.body.appendChild(svg);

http://codepen.io/simonsarris/pen/qdgeGR?editors=101

就此而言,making SVG intro page上的所有示例似乎都可以在IE边缘上正常工作。

你还有其他事吗?

答案 2 :(得分:0)

我只是遵循了GOJ的示例,并且效果很好

[https://gojs.net/latest/samples/minimalBlob.html][1]

Player Settings