我正在为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函数?
答案 0 :(得分:4)
可以访问&lt; object&gt;内的文档。或者&lt; embed&gt;来自父文件。这是ACID3仍在测试的东西之一(太少)svg。
Here's an example如何从父html文档中的脚本修改svg文档。