内联SVG与<object>嵌入式

sic*_*cks 12 javascript svg ruby-on-rails 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" %>
Run Code Online (Sandbox Code Playgroud)

部分视图文件:

<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>
Run Code Online (Sandbox Code Playgroud)

配置/初始化/ mime_types.rb:

Mime::Type.register "image/svg+xml", :svg  
Run Code Online (Sandbox Code Playgroud)

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

Eri*_*röm 4

可以从父文档访问 <object> 或 <embed> 内的文档。这是 ACID3 仍在测试的(太少的)svg 内容之一。

下面是如何通过父 html 文档中的脚本修改 svg 文档的示例。