This is an automated email from the ASF dual-hosted git repository.

wangzx pushed a commit to branch fix-svg-export
in repository https://gitbox.apache.org/repos/asf/incubator-echarts.git

commit 4174861d4d603038fb72227056e6ad845f3383e3
Author: plainheart <[email protected]>
AuthorDate: Fri Nov 20 21:45:53 2020 +0800

    fix(svg): fix charts cannot be exported in svg renderer in IE.
---
 src/component/toolbox/feature/SaveAsImage.ts | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/src/component/toolbox/feature/SaveAsImage.ts 
b/src/component/toolbox/feature/SaveAsImage.ts
index b7c335b..86389da 100644
--- a/src/component/toolbox/feature/SaveAsImage.ts
+++ b/src/component/toolbox/feature/SaveAsImage.ts
@@ -74,7 +74,19 @@ class SaveAsImage extends 
ToolboxFeature<ToolboxSaveAsImageFeatureOption> {
         // IE
         else {
             if (window.navigator.msSaveOrOpenBlob) {
-                const bstr = atob(url.split(',')[1]);
+                const parts = url.split(',');
+                // data:[<mime type>][;charset=<charset>][;base64],<encoded 
data>
+                // see https://css-tricks.com/data-uris/
+                const base64Encoded = parts[0].indexOf('base64') > -1;
+                let bstr = isSvg
+                    // should decode the svg data uri first
+                    ? decodeURIComponent(parts[1])
+                    : parts[1];
+                // only `atob` when the data uri is encoded with base64
+                // otherwise, like `svg` data uri exported by zrender,
+                // there will be an error, for it's not encoded with base64.
+                // (just a url-encoded string through `encodeURIComponent`)
+                base64Encoded && (bstr = atob(bstr));
                 let n = bstr.length;
                 const u8arr = new Uint8Array(n);
                 while (n--) {
@@ -91,6 +103,7 @@ class SaveAsImage extends 
ToolboxFeature<ToolboxSaveAsImageFeatureOption> {
                     + '</body>';
                 const tab = window.open();
                 tab.document.write(html);
+                tab.document.title = title as string;
             }
         }
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to