2017-08-24 120 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