内联SVG与<object> embedded </object>

时间:2013-04-12 21:16:00

标签: javascript ruby-on-rails svg html4

我正在为Eve Online构建一个游戏内浏览器RoR应用程序。我的应用程序的一个要求是显示graphviz生成的SVG图。我遇到了一些在这种环境下满足我的要求的问题。

Eve的IGB没有官方文档,但wiki表示:

  

新的EVE Online游戏内浏览器(代号为Moondoggie)基于两个元素组合的技术堆栈:

     

Awesomium:一个中间件层,它将呈现的网页作为3D引擎可解析的数据提供。 Awesomium由Khrona Software开发。

     

Chromium:一个中间件层,提供进程间通信,网页呈现,HTTP通信以及编写Web浏览器所需的所有其他基础知识。它本身就基于Apple的Webkit框架。 Chromium是一个主要由谷歌主导的开源项目。

     

因此,Moondoggie能够通过Acid3测试,因此可以支持完整的HTML 4.01和CSS3规范。

我需要我在SVG中包含的链接才能访问我的应用程序的javascript。使用<embed><object>嵌入它会使SVG超出我的JS文件的范围。

使用<embed><object> DOES在游戏内浏览器中正确渲染svg。当它像我在下面那样内联时,它会显示一行文本,其中包含来自SVG的文本元素。

更新 这就是我在的地方。我很确定大部分内容都是多余的,因为我没有注意到只是在我自己的视图中使用render file:。我认为mime类型注册更多用于respond_to,但我不确定如何在这种情况下使用它。

主视图片段:

<%= render "map/map" %>

部分查看文件:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:svg="http://www.w3.org/2000/svg">
<head>
    <title>Embedded SVG</title>
</head>
    <body>
        <%= render file: @map.output_file_path %>
    </body>
</html>

配置/初始化/ mime_types.rb:

Mime::Type.register "image/svg+xml", :svg  

我不明白为什么它在<object>标记内呈现正常但在内联时不呈现。如何在主视图中模拟<object>内的环境?或者,如何让<object>标记访问我的javascript函数?

1 个答案:

答案 0 :(得分:4)

可以访问&lt; object&gt;内的文档。或者&lt; embed&gt;来自父文件。这是ACID3仍在测试的东西之一(太少)svg。

Here's an example如何从父html文档中的脚本修改svg文档。