SVG-Pan-Zoom на DOM Object тег не работает
У меня есть <object>
где я загружаю внешний файл SVG:
<object type="image/svg+xml" data="system.svg" id="Graph_Container" class="GraphContainmentArea">
Your browser does not support SVG
</object>
Я использую функции SVG для панорамирования и масштабирования в следующей библиотеке: https://github.com/ariutta/svg-pan-zoom. Тем не менее, просто добавив svg-pan-zoom.js
файла на моей странице недостаточно для добавления каких-либо функциональных возможностей к svg, содержащемуся в object
с кодом:
<?xml version="1.0" encoding="UTF-8"?>
<iw:iwidget id="GraphContainer" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:iw="http://www.ibm.com/xmlns/prod/iWidget" supportedModes="view edit"
lang="en" iScope="GraphContainerScope" title="Graph Container Widget">
<iw:content mode="view">
<![CDATA[
<link rel="stylesheet" href="/Widgets/GraphContainerWidget/css/graphcontainer.css" />
<script src="/Widgets/GraphContainerWidget/js/jquery.min.js"></script>
<div id="GraphContainer_IWID_" class="search-area" style="display:block;">
<div class="content-area" id="content-area_IWID_">
<div class="RightPanel" id="rightPanel_IWID_">
<table id='main-content_IWID_' class="links-included">
<tr>
<object type="image/svg+xml" data="" id="_IWID_Graph_Container" class="GraphContainmentArea">
Your browser does not support SVG
</object>
</tr>
<tr><td></td></tr>
<tr><td></td></tr>
<tr>
<td id="_IWID_Graph_Footer" class="FooterContainmentArea">Optional Footer</td>
</tr>
</table>
<div id='footer_IWID_' class="footer">
</div>
</div>
</div>
</div>
<script src="/Widgets/GraphContainerWidget/js/svg-pan-zoom.js"></script>
<script type="text/javascript">
var _IWID_attributesItemSet = iContext.getiWidgetAttributes();
var _IWID_iDescriptor = iContext.getiDescriptor();
var SVG_GRAPH_URL = _IWID_attributesItemSet.getItemValue("wid_import_field");
var SVG_FOOTER = _IWID_attributesItemSet.getItemValue("wid_footer_field");
var SVG_MULTI = _IWID_attributesItemSet.getItemValue("wid_multigraphs_field");
console.log("Viewmode SRC URL: " + SVG_GRAPH_URL);
try {
if (SVG_GRAPH_URL !== null && SVG_GRAPH_URL !== "") {
var finished_URL = httpcheck() + SVG_GRAPH_URL;
$("#Graph_Container").attr("data", finished_URL);
setTimeout(function() {
svgPanZoom("#_IWID_Graph_Container", {
zoomEnabled: true,
controlIconsEnabled: true
});
}, 2000);
} else {
alert("No URL passed to graph container!")
}
}
catch(e) {
console.log(e.name + "-" + e.description + "-" + e.message);
}
function httpcheck() {
if (SVG_GRAPH_URL.substring(0,7) == "http://" || SVG_GRAPH_URL.substring(0,8) == "https://") {
return "";
} else {
return "http://";
}
}
</script>
]]>
</iw:content>
Примечание: jQuery - единственная библиотека, которую я использую, кроме SVG-Pan-Zoom.js. Какие-нибудь советы о том, как мне решить эту проблему / улучшить код?
Текущая ошибка, которую я получаю, svgPan is not defined
,
Выше код обновлен
1 ответ
Трудно определить причину вашей проблемы, потому что их пример не может быть воспроизведен.
Примечание: я протестировал "svg-pan-zoom" в моем приложении, и оно работало нормально.
Возможные причины вашей проблемы:
SVG и ваша страница требуют работы в "одном домене" или поддержки "CORS".
Вы используете "схему URI файла", но это вызывает проблему с безопасностью в "Веб-браузере"
Может быть проблемой вовремя клонировать репозиторий.
Решения
Для решения проблемы с перекрестным происхождением (CORS) прочитайте эту ссылку: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
Для проблемы с "файловым URI", я рекомендую установить "Xampp" (Apache и PHP) и "Node.js" для использования "HTTP localhost"
Для проблем с "git download" вам нужно либо
git clone --recursive git@github.com:ariutta/svg-pan-zoom.git
или если вы уже клонировали его, тоgit submodule update --init --recursive
Пример ширины "URI данных"
Примечание: работа только в Firefox, потому что в Chrome "схема URI данных" не отправляет "заголовок источника"
Примечание: для работы в Chrome используйте "схему http URI" для загрузки SVG
Примечание: я использовал "URI данных", потому что jsfiddle не поддерживает отправку "ресурсов"
<script src="svg-pan-zoom.js"></script>
<object type="image/svg+xml" id="svgId" data="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+Cjxzdmcgd2lkdGg9IjI2NiIgaGVpZ2h0PSIxNzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiA8IS0tIENyZWF0ZWQgd2l0aCBNZXRob2QgRHJhdyAtIGh0dHA6Ly9naXRodWIuY29tL2R1b3BpeGVsL01ldGhvZC1EcmF3LyAtLT4KIDxnPgogIDx0aXRsZT5iYWNrZ3JvdW5kPC90aXRsZT4KICA8cmVjdCBmaWxsPSIjZmZmIiBpZD0iY2FudmFzX2JhY2tncm91bmQiIGhlaWdodD0iMTczIiB3aWR0aD0iMjY4IiB5PSItMSIgeD0iLTEiLz4KICA8ZyBkaXNwbGF5PSJub25lIiBvdmVyZmxvdz0idmlzaWJsZSIgeT0iMCIgeD0iMCIgaGVpZ2h0PSIxMDAlIiB3aWR0aD0iMTAwJSIgaWQ9ImNhbnZhc0dyaWQiPgogICA8cmVjdCBmaWxsPSJ1cmwoI2dyaWRwYXR0ZXJuKSIgc3Ryb2tlLXdpZHRoPSIwIiB5PSIwIiB4PSIwIiBoZWlnaHQ9IjEwMCUiIHdpZHRoPSIxMDAlIi8+CiAgPC9nPgogPC9nPgogPGc+CiAgPHRpdGxlPkxheWVyIDE8L3RpdGxlPgogIDxyZWN0IGlkPSJzdmdfNCIgaGVpZ2h0PSI2NCIgd2lkdGg9IjE1My45OTk5OTYiIHk9IjQwIiB4PSI0MyIgb3BhY2l0eT0iMC41IiBmaWxsLW9wYWNpdHk9Im51bGwiIHN0cm9rZS1vcGFjaXR5PSJudWxsIiBzdHJva2Utd2lkdGg9IjEuNSIgc3Ryb2tlPSIjMDAwIiBmaWxsPSIjZmZmIi8+CiA8L2c+Cjwvc3ZnPg==">
Your browser does not support SVG or not loaded (Work only in Gecko - Firefox)
</object>
<script>
window.onload = function() {
svgPanZoom("#svgId", {
zoomEnabled: true,
controlIconsEnabled: true
});
};
</script>
Пример в сети: http://jsfiddle.net/L4u6ap2w/