还有一种解决方案,无需使用URL.createObjectURL()可能在某些情况下会有麻烦或不可用。
您可以使用一个替代的带有base64编码的svg的 'URL':
var svg = '<svg width="400" height="110"><rect width="300" height="100" /></svg>';
icon.url = 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(svg);
JavaScript(Firefox)btoa()用于从SVG文本获取Base64编码。您还可以使用http://dopiaza.org/tools/datauri/index.php生成基础数据URL。
以下是完整示例:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script src="http://maps.google.com/maps/api/js?sensor=false" type="text/javascript"></script>
</head>
<body>
<div id="map" style="width: 500px; height: 400px;"></div>
<script type="text/javascript">
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 10,
center: new google.maps.LatLng(-33.92, 151.25),
mapTypeId: google.maps.MapTypeId.ROADMAP
});
var template = [
'<?xml version="1.0"?>',
'<svg width="26px" height="26px" viewBox="0 0 100 100" version="1.1" xmlns="http://www.w3.org/2000/svg">',
'<circle stroke="#222" fill="{{ color }}" cx="50" cy="50" r="35"/>',
'</svg>'
].join('\n');
var svg = template.replace('{{ color }}', '#800');
var docMarker = new google.maps.Marker({
position: new google.maps.LatLng(-33.92, 151.25),
map: map,
title: 'Dynamic SVG Marker',
icon: { url: 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(svg) }
});
</script>
</body>
</html>
如果您需要更多信息或者其他解决方案,可以在这里找到。
虽然本回答可能对您来说有些晚了,但它也许能帮助其他寻找同样问题解决方案的人。
<svg>
标签创建图像并将其设置为图标。每当我更新颜色时,我只需替换fill
属性即可。不幸的是,你不能仅通过.svg文件实现这一点,而只能通过代码来实现。 - ThePersonWithoutC