Эти шаги работают для меня:
Хорошо идти !!!
library(Rcpp)
library(ggplot2)
Вы можете назначить обработчик события onload для элемента в вашем документе SVG и вызвать вызов функции javascript на странице html. onload для SVGLoad.
http://www.w3.org/TR/SVG11/interact.html#LoadEvent
Событие запускается в точке, где пользовательский агент полностью проанализировал элемент и его потомков и готов действовать соответствующим образом по этому элементу
С помощью jQuery вы можете привязываться к событию загрузки окна, которое Erik упоминает с помощью:
$(window).load(function(){
var svg = document.getElementById("chart").getSVGDocument();
});
Предполагая, что ваш SVG находится в теге <embed>
:
<embed id="embedded-image" src="image.svg" type="image/svg+xml" />
SVG-изображение по существу находится в суб-документе, который будет иметь отдельное событие load
с событием основного document
]. Тем не менее, вы можете прослушать это событие и обработать его:
var embed = document.getElementById("embedded-image");
embed.addEventListener('load', function()
{
var svg = embed.getSVGDocument();
// Operate upon the SVG DOM here
});
Это лучше, чем опрос, поскольку любые изменения, которые вы делаете для SVG, произойдут до того, как они будут сначала нарисованы, что уменьшит мерцание и затраты на процессор, потраченные на рисование .
В вашем элементе внедрения (например, «embed», «object», «iframe») в основном документе добавьте атрибут onload
, который вызывает вашу функцию, или добавьте прослушиватель событий в скрипт, например embeddingElm.addEventListener('load', callbackFunction, false)
. Другим вариантом может быть прослушивание DOMContentLoaded
, зависит от того, для чего вы хотите.
Вы также можете добавить слушателя загрузки в основной документ. jQuery(document).ready
не означает, что загружаются все ресурсы, только что сам документ имеет DOM, который готов к действию. Однако обратите внимание, что если вы прослушиваете загрузку всего документа, функция обратного вызова не будет вызываться до тех пор, пока не будут загружены все ресурсы в этом документе, css, javascript и т. Д.
Если вы используете inline svg, тогда jQuery(document).ready
будет работать только отлично.
В следующем примечании вы можете рассмотреть возможность использования embeddingElm.contentDocument
(если доступно) вместо embeddingElm.getSVGDocument()
.
load
никогда не запускается.
– Flimm
17 October 2017 в 13:44
Вы можете использовать событие onload для проверки.
blockquote>Предположим, что some.svg встроен в тег объекта:
<body> <object id="svgholder" data="some.svg" type="image/svg+xml""></object> </body>
JQuery
var svgholder = $('body').find("object#svgholder"); svgholder.load("image/svg+xml", function() { alert("some svg loaded"); });
javascript
var svgholder = document.getElementById("svgholder"); svgholder.onload = function() { alert("some svg loaded"); }
onload
функцию addEventListener('load', handler)
, чтобы не переопределять другие обработчики нагрузки. Однако это не поддерживается древними браузерами. Вопрос: jQuery's load
был первым методом, который я пытался использовать, но без 'image/svg+xml'
в качестве первого аргумента он не будет работать. Можете ли вы объяснить эту магию? Я не мог найти объяснения в документации jQuery. Он просто упоминает аргумент как url
(и здесь мы приводим MIME-тип). И снова, почему нам не нужна такая вещь для onload
?
– Neon
13 December 2016 в 12:53
addEventListener
.
– Niavlys
11 March 2017 в 16:06
svgholder.load("image/svg+xml", function()...
вместо этого ссылается на загрузку jquery ajax. До v3.0 jquery определял, какую загрузку вызывать на основе предоставленных аргументов. С помощью строки в первом аргументе jquery пытается сделать GET для «image / svg + xml» в качестве URL-адреса. Поскольку он помещает загруженный контент в выбранный элемент, затем вызывает предоставленный обратный вызов, он может работать как загруженное уведомление, но он делает что-то еще. Ищите 404 в консоли. Кроме того, обработчик события .load устарел с 3.0.
– Mnebuerquo
5 April 2017 в 19:23
Событие загрузки элемента внедрения (например, объекта) было бы моим преимуществом, но если это почему-то не является жизнеспособным решением, единственный общий и надежный тест, который я нашел для SVG DOM, - это метод getCurrentTime корневого элемента SVG:
var element = document.getElementById( 'elementId' );
var svgDoc = element.contentDocument;
var svgRoot = svgDoc ? svgDoc.rootElement : null;
if ( svgRoot
&& svgRoot.getCurrentTime
&& ( svgRoot.getCurrentTime() > 0 ))
{
/* SVG DOM ready */
}
В рекомендации W3C SVG указано, что getCurrentTime на SVGSVGElement:
Возвращает текущее время в секундах относительно времени начала для текущего фрагмента документа SVG. Если getCurrentTime вызывается до начала временной шкалы документа (например, скриптом, запущенным в элементе «script» до отправки события SVGLoad документа), возвращается 0.
load
прослушиватель событий имеет проблемы. – Flimm 17 October 2017 в 13:26