2017-08-24 121 views
1

这是一个类似的问题,但我想知道如何访问SVG的JavaScript函数时,无法嵌入他们,但是从外部文件中输入:从主html脚本中调用SVG的外部JavaScript函数?

Call svg javascript function inside html javascript function

所以,我会尝试做我的问题清楚并且希望不会过于复杂。

我有main.html和main.js。

我也有一些SVG.svg,它导入了一些带有函数foo()的someSVG.js。

main.html将someSVG.svg作为对象元素导入。

如何从main.js调用foo()?

+0

为someSVG.js创建对象,所以像这样var some = new SomeSVG()并调用some.foo() –

回答

2

只要你嵌入与<object>标签的SVG,你可以用

var inner = document.querySelector('object').contentWindow 

访问SVG的窗口对象就像外窗的窗口对象,它提供了所有的全局变量,你会发现在正常窗口中,例如脚本定义的inner.foo()inner.document

注意:Safari支持版本10中的HTMLObjectElement.contentDocument,但不支持.documentWindow。

+0

SVG也必须是相同的原点或CORS可访问的。 –

+0

@TheBlueCrayon想评论,但不能因为失去声望。他留下了一个编辑。以下是全文:Safari不支持svg元素的HTMLObjectElement.contentWindow。使用此[简化测试用例](https://plnkr.co/edit/lrf1qCcxY0NtU70GSI09?p=preview),在Safari 11及更高版本中测试Mac和iOS。 HTMLObjectElement.contentWindow根本不包含在[apple developer documentation](https://developer.apple.com/documentation/webkitjs/htmlobjectelement?changes=latest_majo)中。 – ccprog

+0

好吧,现在我终于看到我的错误... – ccprog