无法将 long json 保存到 Internet Explorer 11 中的文件
Cannot save long json to file in internet explorer 11
我正在尝试将我的 js 应用程序的状态(一个 js 对象)作为 json 字符串保存到一个文件中,以便以后能够再次加载它。
我正在使用这个代码
function SaveAsFile(t,f,m) {
try {
var b = new Blob([t],{type:m});
saveAs(b, f);
} catch (e) {
window.open("data:"+m+"," + encodeURIComponent(t), '_blank','');
}
}
function download(text) {
SaveAsFile(text,"filename.txt","application/json;charset=utf-8");
}
$('#saveButton').on('click', function(e) {
download(JSON.stringify(appData));
});
现在奇怪的部分是:如果保存一个简短的 json 就像:
{
"treeData": {
"id": "root",
"name": "Sicherung",
"data": {
"isLeaf": false,
"l": 0,
"A": 1,
"R": 0,
"Rsum": 0,
"I": 0,
"dUNormal": 0,
"danger": false,
"uRest": 24
},
"children": []
},
"config": {
"voltage": 24,
"iFuse": 2,
"temperature": 30
}
}
它工作得很好。
但是当我尝试保存更长的 json 时,例如:
{
"treeData": {
"id": "root",
"name": "Sicherung",
"data": {
"isLeaf": false,
"l": 0,
"A": 1,
"R": 0,
"Rsum": 0,
"I": 0,
"dUNormal": 0,
"danger": false,
"uRest": 24
},
"children": [{
"id": "9a7fa260-5369-e041-a79f-408ec0f181cd",
"name": "___",
"data": {
"isLeaf": false,
"l": 0,
"A": 0,
"R": null,
"Rsum": null,
"I": 0,
"dUNormal": null,
"danger": false,
"uRest": null
},
"children": [{
"id": "00c6b684-8914-6535-2baf-b93d11fdaa1b",
"name": "___",
"data": {
"isLeaf": false,
"l": 0,
"A": 0,
"R": null,
"Rsum": null,
"I": 0,
"dUNormal": null,
"danger": false,
"uRest": null
},
"children": [{
"id": "24ebdc15-44c9-1dea-043d-7af2a696ccf3",
"name": "___",
"data": {
"isLeaf": false,
"l": 0,
"A": 0,
"R": null,
"Rsum": null,
"I": 0,
"dUNormal": null,
"danger": false,
"uRest": null
},
"children": [{
"id": "abd73f4e-896e-4c3f-d3f0-fe0905b0f63d",
"name": "___",
"data": {
"isLeaf": false,
"l": 0,
"A": 0,
"R": null,
"Rsum": null,
"I": 0,
"dUNormal": null,
"danger": false,
"uRest": null
},
"children": [{
"id": "907d4323-758e-e796-6f59-f45220fe4c72",
"name": "___",
"data": {
"isLeaf": false,
"l": 0,
"A": 0,
"R": null,
"Rsum": null,
"I": 0,
"dUNormal": null,
"danger": false,
"uRest": null
},
"children": [{
"id": "89a3000f-e915-fde6-6b20-02678ae70720",
"name": "___",
"data": {
"isLeaf": false,
"l": 0,
"A": 0,
"R": null,
"Rsum": null,
"I": 0,
"dUNormal": null,
"danger": false,
"uRest": null
},
"children": [{
"id": "301d3a64-fec2-f19d-8513-cf0fc2bc88be",
"name": "___",
"data": {
"isLeaf": false,
"l": 0,
"A": 0,
"R": null,
"Rsum": null,
"I": 0,
"dUNormal": null,
"danger": false,
"uRest": null
},
"children": [{
"id": "b477b73c-184b-eb61-973a-2fbb3617d2d7",
"name": "___",
"data": {
"isLeaf": false,
"l": 0,
"A": 0,
"R": null,
"Rsum": null,
"I": 0,
"dUNormal": null,
"danger": false,
"uRest": null
},
"children": []
}]
}]
}]
}]
}]
}]
}]
}]
},
"config": {
"voltage": 24,
"iFuse": 2,
"temperature": 30
}
}
ie11提示由于安全设置无法下载此文件
在 chrome 中,短字符串和长字符串 jsons 有效。不幸的是我需要它在 ie11 上工作。
- 有没有人知道如何解决这个问题?
- 哪个安全设置导致此错误?
- 我可以将它保存在不同的 way/format 中吗?
感谢您的帮助!
如果其他人有这个问题,这是我的解决方案。
虽然我没有找到真正的问题,但我用不同的方法解决了它:
function download(text) {
if (isIE()) {
var targetPath = $('#ieTargetPath').val();
var fso = new ActiveXObject("Scripting.FileSystemObject");
var s = fso.CreateTextFile(targetPath, true, true);
s.WriteLine(text);
s.Close();
} else {
...
}
}
我正在尝试将我的 js 应用程序的状态(一个 js 对象)作为 json 字符串保存到一个文件中,以便以后能够再次加载它。
我正在使用这个代码
function SaveAsFile(t,f,m) {
try {
var b = new Blob([t],{type:m});
saveAs(b, f);
} catch (e) {
window.open("data:"+m+"," + encodeURIComponent(t), '_blank','');
}
}
function download(text) {
SaveAsFile(text,"filename.txt","application/json;charset=utf-8");
}
$('#saveButton').on('click', function(e) {
download(JSON.stringify(appData));
});
现在奇怪的部分是:如果保存一个简短的 json 就像:
{
"treeData": {
"id": "root",
"name": "Sicherung",
"data": {
"isLeaf": false,
"l": 0,
"A": 1,
"R": 0,
"Rsum": 0,
"I": 0,
"dUNormal": 0,
"danger": false,
"uRest": 24
},
"children": []
},
"config": {
"voltage": 24,
"iFuse": 2,
"temperature": 30
}
}
它工作得很好。
但是当我尝试保存更长的 json 时,例如:
{
"treeData": {
"id": "root",
"name": "Sicherung",
"data": {
"isLeaf": false,
"l": 0,
"A": 1,
"R": 0,
"Rsum": 0,
"I": 0,
"dUNormal": 0,
"danger": false,
"uRest": 24
},
"children": [{
"id": "9a7fa260-5369-e041-a79f-408ec0f181cd",
"name": "___",
"data": {
"isLeaf": false,
"l": 0,
"A": 0,
"R": null,
"Rsum": null,
"I": 0,
"dUNormal": null,
"danger": false,
"uRest": null
},
"children": [{
"id": "00c6b684-8914-6535-2baf-b93d11fdaa1b",
"name": "___",
"data": {
"isLeaf": false,
"l": 0,
"A": 0,
"R": null,
"Rsum": null,
"I": 0,
"dUNormal": null,
"danger": false,
"uRest": null
},
"children": [{
"id": "24ebdc15-44c9-1dea-043d-7af2a696ccf3",
"name": "___",
"data": {
"isLeaf": false,
"l": 0,
"A": 0,
"R": null,
"Rsum": null,
"I": 0,
"dUNormal": null,
"danger": false,
"uRest": null
},
"children": [{
"id": "abd73f4e-896e-4c3f-d3f0-fe0905b0f63d",
"name": "___",
"data": {
"isLeaf": false,
"l": 0,
"A": 0,
"R": null,
"Rsum": null,
"I": 0,
"dUNormal": null,
"danger": false,
"uRest": null
},
"children": [{
"id": "907d4323-758e-e796-6f59-f45220fe4c72",
"name": "___",
"data": {
"isLeaf": false,
"l": 0,
"A": 0,
"R": null,
"Rsum": null,
"I": 0,
"dUNormal": null,
"danger": false,
"uRest": null
},
"children": [{
"id": "89a3000f-e915-fde6-6b20-02678ae70720",
"name": "___",
"data": {
"isLeaf": false,
"l": 0,
"A": 0,
"R": null,
"Rsum": null,
"I": 0,
"dUNormal": null,
"danger": false,
"uRest": null
},
"children": [{
"id": "301d3a64-fec2-f19d-8513-cf0fc2bc88be",
"name": "___",
"data": {
"isLeaf": false,
"l": 0,
"A": 0,
"R": null,
"Rsum": null,
"I": 0,
"dUNormal": null,
"danger": false,
"uRest": null
},
"children": [{
"id": "b477b73c-184b-eb61-973a-2fbb3617d2d7",
"name": "___",
"data": {
"isLeaf": false,
"l": 0,
"A": 0,
"R": null,
"Rsum": null,
"I": 0,
"dUNormal": null,
"danger": false,
"uRest": null
},
"children": []
}]
}]
}]
}]
}]
}]
}]
}]
},
"config": {
"voltage": 24,
"iFuse": 2,
"temperature": 30
}
}
ie11提示由于安全设置无法下载此文件
在 chrome 中,短字符串和长字符串 jsons 有效。不幸的是我需要它在 ie11 上工作。
- 有没有人知道如何解决这个问题?
- 哪个安全设置导致此错误?
- 我可以将它保存在不同的 way/format 中吗?
感谢您的帮助!
如果其他人有这个问题,这是我的解决方案。
虽然我没有找到真正的问题,但我用不同的方法解决了它:
function download(text) {
if (isIE()) {
var targetPath = $('#ieTargetPath').val();
var fso = new ActiveXObject("Scripting.FileSystemObject");
var s = fso.CreateTextFile(targetPath, true, true);
s.WriteLine(text);
s.Close();
} else {
...
}
}