2013-04-12 10 views
12

Я создаю браузерное приложение для RoR для Eve Online. Одним из требований моего приложения является отображение SVG-графика, созданного с помощью Graphviz. У меня возникли некоторые проблемы, связанные с удовлетворением моих требований в этой среде.Inline SVG vs <object> встроенный

Никакая официальная документация не доступна IGB Евы, но вики указывает:

Новый EVE Online в игре браузера (под кодовым названием Moondoggie) основана на стек технологии сочетания двух элементов:

Awesomium: слой промежуточного слоя, который предоставляет отображаемые веб-страницы как данные, обрабатываемые 3D-движком. Awesomium разработан компанией Khrona Software.

Chromium: Уровень промежуточного слоя, который обеспечивает межпроцессную связь, рендеринг веб-страниц, HTTP-связь и все другие основы, необходимые для написания веб-браузера. Это само по себе основано на структуре Apple Webkit. Chromium - проект с открытым исходным кодом, отстаиваемый главным образом Google.

Из-за этого Moondoggie может пройти тест Acid3 и, следовательно, может поддерживать полные спецификации HTML 4.01 и CSS3.

Мне нужны ссылки, которые я включаю в SVG, чтобы иметь доступ к javascript моего приложения. Встраивая его в <embed> или <object>, выкладывает SVG из объема моих файлов JS.

Использование <embed> или <object> ДЕЙСТВИТЕЛЬНО визуализирует svg в игровом браузере. Когда он встроен, как показано ниже, он отображает одну строку текста, содержащую JUST текстовые элементы из SVG.

Обновление Здесь я нахожусь. Я почти уверен, что большая часть этого избытка, поскольку я не заметил разницы, просто используя render file: внутри своего представления сам по себе. Я думаю, что регистрация типа mime более подходит для использования с response_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

Означает ли это, что этот браузер на основе Webkit не поддерживает HTML5? Использует ли XHTML 4 вариант? Для pre-HTML5, по моему опыту, XHTML - действительно самый многообещающий способ заставить его работать. –

+0

Существует «прототип поддержки HTML5», но, похоже, он попал или промахнулся. Я не совсем уверен. Это буквально вся документация о том, что делает этот браузер и не поддерживает. Я не очень хорошо знаком с XHTML, и у меня нет хорошей справки по doctype, но я смотрю на это: http://www.w3.org/QA/2002/04/valid-dtd-list.html , Я предполагаю, что мне нужно использовать один из них вместо '' для использования XHTML? – sicks

+0

Просто идея. Возможно, стоит посмотреть на то, что делают Google Charts. Они очень сильно используют SVG и Javascript, поэтому вы можете получить некоторые идеи. Возможно, вы можете заглянуть в круговую диаграмму на интерактивной галерее https://developers.google.com/chart/interactive/docs/gallery для идей. Я думаю, что они используют тег напрямую, что держит все в объеме. – Phil

ответ

4

Возможно получить доступ к документу внутри объекта <> или < embed> из родительского документа. Это один из (слишком мало) SVG-объектов, которые ACID3 все еще тестирует.

Here's an example как изменить документ svg из сценария в родительском документе html.

+0

Объект/embed требует прослушивателей событий от родителя. Вот почему я сначала использовал inline. Можете ли вы добавить прослушиватели событий в теги внутри '', которые вызывают функции с моей родительской страницы? – sicks

+0

Да. Добавьте слушателей событий с помощью 'elm.addEventListener', а затем в функцию, которая обрабатывает событие, которое вы можете вызвать, например' window.parent.yourFunctionInMainDocument (...) ', немного похожее на этот пример: http: //dahlström.net /svg/html/from-svg-to-parent-html-script.html. –