Mozilla Firefox 不会在 addEventListener('load'
Mozilla Firefox doesn't load SVG objects in addEventListener('load'
我不知道为什么,但它适用于 Chrome 和 Safari,不适用于 Mozilla。
我有 object
html 标签加载 svg 文件。文件包含 .s0
classes。我想在您单击 class.
时处理事件
谁知道哪里出了问题?抱歉,当我尝试将代码粘贴到那里时,jsfiddle 没有显示 object
。
<object data="jo.svg" type="image/svg+xml" id="obj"></object>
代码
$(function() {
var a = document.getElementById('obj');
a.addEventListener("load", function() {
// !!!
console.log('this line is not reachable in Mozilla or reached before svg loaded');
var svgDoc = a.contentDocument;
var els = svgDoc.querySelectorAll(".s0");
for (var i = 0, length = els.length; i < length; i++) {
els[i].addEventListener("click", function() {
alert('clicked');
}, false);
}
});
});
首先,您需要决定是否使用 jquery,并且不要将 jquery 代码与本机 javascript 代码混合使用。
Javascript版本:
<!doctype html>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<object data="http://gbip.ru/poselki/genplan/5/full/gp.svg" type="image/svg+xml" id="obj"></object>
<script type="text/javascript">
window.addEventListener('DOMContentLoaded', function() {
var obj = document.getElementById('obj');
obj.addEventListener('load', function(){
console.log('loaded');
});
});
</script>
</body>
</html>
Jquery版本
<!doctype html>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<object data="http://gbip.ru/poselki/genplan/5/full/gp.svg" type="image/svg+xml" id="obj"></object>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
var $obj = $('#obj');
$obj.on('load', function () {
console.log('loaded');
})
});
</script>
</body>
</html>
Ubuntu 14.04.3 LTS, Firefox 40.0.3
最好使用 <svg>
标签,而不是 <object>
。无论如何,Firefox 与 <embed>
配合使用效果更好。如果您可以将 svg 代码放入标签中,一切正常。
您可以尝试使用 <embed>
标签:
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/embed
我建议你使用<svg>
标签,因为你可以用CSS和Javascript轻松控制里面的所有元素:
https://developer.mozilla.org/en-US/docs/SVG_In_HTML_Introduction
也许 Raphaël JS 是适合您的好库。它允许使用 javascript 控制所有 SVG 元素,并且可以轻松完成许多任务:
如果你能用Modernizr.js库就好了,它可以帮助你检测是否有浏览器支持。
if (!Modernizr.svg) {
$(".logo img").attr("src", "images/logo.png");
}
要包含 modernizr:https://modernizr.com/
您可以阅读这篇有趣且完整的文章,了解如何在所有变体中使用 svg:
https://css-tricks.com/using-svg/
但是,你应该让@cetver 在他的回答中向你建议,不要混合 jQuery 和原生 js 代码。
通过所有推荐,您可以通过简单的方式实现加载内容。
祝你好运。
我通过使用解决了它:
$('#svg').load('"image/svg+xml"', function () {
alert('svg loaded');
});
它适用于 Chrome、Firefox 和 IE9+。
我不知道为什么,但它适用于 Chrome 和 Safari,不适用于 Mozilla。
我有 object
html 标签加载 svg 文件。文件包含 .s0
classes。我想在您单击 class.
谁知道哪里出了问题?抱歉,当我尝试将代码粘贴到那里时,jsfiddle 没有显示 object
。
<object data="jo.svg" type="image/svg+xml" id="obj"></object>
代码
$(function() {
var a = document.getElementById('obj');
a.addEventListener("load", function() {
// !!!
console.log('this line is not reachable in Mozilla or reached before svg loaded');
var svgDoc = a.contentDocument;
var els = svgDoc.querySelectorAll(".s0");
for (var i = 0, length = els.length; i < length; i++) {
els[i].addEventListener("click", function() {
alert('clicked');
}, false);
}
});
});
首先,您需要决定是否使用 jquery,并且不要将 jquery 代码与本机 javascript 代码混合使用。
Javascript版本:
<!doctype html>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<object data="http://gbip.ru/poselki/genplan/5/full/gp.svg" type="image/svg+xml" id="obj"></object>
<script type="text/javascript">
window.addEventListener('DOMContentLoaded', function() {
var obj = document.getElementById('obj');
obj.addEventListener('load', function(){
console.log('loaded');
});
});
</script>
</body>
</html>
Jquery版本
<!doctype html>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<object data="http://gbip.ru/poselki/genplan/5/full/gp.svg" type="image/svg+xml" id="obj"></object>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
var $obj = $('#obj');
$obj.on('load', function () {
console.log('loaded');
})
});
</script>
</body>
</html>
Ubuntu 14.04.3 LTS, Firefox 40.0.3
最好使用 <svg>
标签,而不是 <object>
。无论如何,Firefox 与 <embed>
配合使用效果更好。如果您可以将 svg 代码放入标签中,一切正常。
您可以尝试使用 <embed>
标签:
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/embed
我建议你使用<svg>
标签,因为你可以用CSS和Javascript轻松控制里面的所有元素:
https://developer.mozilla.org/en-US/docs/SVG_In_HTML_Introduction
也许 Raphaël JS 是适合您的好库。它允许使用 javascript 控制所有 SVG 元素,并且可以轻松完成许多任务:
如果你能用Modernizr.js库就好了,它可以帮助你检测是否有浏览器支持。
if (!Modernizr.svg) {
$(".logo img").attr("src", "images/logo.png");
}
要包含 modernizr:https://modernizr.com/
您可以阅读这篇有趣且完整的文章,了解如何在所有变体中使用 svg:
https://css-tricks.com/using-svg/
但是,你应该让@cetver 在他的回答中向你建议,不要混合 jQuery 和原生 js 代码。
通过所有推荐,您可以通过简单的方式实现加载内容。
祝你好运。
我通过使用解决了它:
$('#svg').load('"image/svg+xml"', function () {
alert('svg loaded');
});
它适用于 Chrome、Firefox 和 IE9+。