为提升您的使用体验,本站正在维护,部分功能暂时无法使用。如果本站文章无法解决您的问题,您想要向社区提问的话,请到 Twitter 上的 @FirefoxSupport 或 Reddit 上的 /r/firefox 提问,我们的支持社区将会很快回复您的疑问。

搜索 | 用户支持

防范以用户支持为名的诈骗。我们绝对不会要求您拨打电话或发送短信,及提供任何个人信息。请使用“举报滥用”选项报告涉及违规的行为。

详细了解

Getting the SVG document(contentDocument) using javascript inside the Object tag returns null

  • 9 个回答
  • 1 人有此问题
  • 1 次查看
  • 最后回复者为 Zaak

more options

The following code work in Firefox v54, but stopped working on Firefox v68.4.1 (possibly earlier version as well).

index.html: <body>

<object type="image/svg+xml" data="test.svg", id="test_svg_id">

   Your browser doesn't support SVG
</object>

<script type="text/javascript" src="test.js"></script>

</body>

javascript: function init() {

 console.log("init()");

// Get the overall SVG defined in the Index HMTL page var svg_object = document.getElementById("test_svg_id");

// Get the SVG document inside the Object tag var svg_document = svg_object.contentDocument; }

Any idea why contentDocument is always null?

The following code work in Firefox v54, but stopped working on Firefox v68.4.1 (possibly earlier version as well). index.html: <body> <object type="image/svg+xml" data="test.svg", id="test_svg_id"> Your browser doesn't support SVG </object> <script type="text/javascript" src="test.js"></script> </body> javascript: function init() { console.log("init()"); // Get the overall SVG defined in the Index HMTL page var svg_object = document.getElementById("test_svg_id"); // Get the SVG document inside the Object tag var svg_document = svg_object.contentDocument; } Any idea why contentDocument is always null?

被采纳的解决方案

Zaak said

I am not using a server. I am directly opening the index.html. Is this a security issue that has been fixed in latest version of Firefox?

Oh, ok. That is the issue then. This is not supposed to work if you're just using file://. I guess it was probably added. It won't affect you if you actually publish the project though.

You can serve up the files locally with a variety of solutions. This one looks good if you are using node: https://github.com/http-party/http-server

I usually use python, so I run "python -m http.server" in the directory where all my files are. There are many solutions to serve up your files easily. I would highly recommend this as there are many more things that simply won't work when you open the html file directly.

定位到答案原位置 👍 1

所有回复 (9)

more options

I believe either svg_object.innerHTML or svg_object.innerText should give you the output you are looking for.

由Matthew Thomas于修改

more options

I am trying to use interactive SVG and the contentDocument would give me access to all the object I can manipulate. I think something has been changed in later version of Firefox.

more options

The contentDocument property on frames now returns null if the caller doesn’t subsume the document. This change affects the contentDocument property on the <frame>, <iframe> and <object> elements as well as the getSVGDocument method on the <embed>, <iframe> and <object> elements.

more options

I am new to javascripts. Can you please give me an example?

more options

Oh, I get it. Of course, you want to access the external file and not the "Your browser doesn't support SVG" text...

You are still on an old version of the browser.

Do you have this example hosted somewhere that we can take a look at? This object link is not going to work if you open the html file directly (i.e. with file://). Are you serving this up on a local server?

由Matthew Thomas于修改

more options

I am not using a server. I am directly opening the index.html. Is this a security issue that has been fixed in latest version of Firefox?

more options

选择的解决方案

Zaak said

I am not using a server. I am directly opening the index.html. Is this a security issue that has been fixed in latest version of Firefox?

Oh, ok. That is the issue then. This is not supposed to work if you're just using file://. I guess it was probably added. It won't affect you if you actually publish the project though.

You can serve up the files locally with a variety of solutions. This one looks good if you are using node: https://github.com/http-party/http-server

I usually use python, so I run "python -m http.server" in the directory where all my files are. There are many solutions to serve up your files easily. I would highly recommend this as there are many more things that simply won't work when you open the html file directly.

more options

Thank you for your help.

I'll update you tomorrow if this solves my problems.

more options

I can confirm that directly opening the index.html in a web browser (using file://) no longer work.

As per Mathew's suggestion, I used local webserver by following method: 1. Ensure python is installed 2. Open Command prompt 3. Change directory to location of index.html in the Command prompt 4. Typing "python -m http.server" to start the server 5. Type "localhost:8000" in the Firefox web browser