gpt4 book ai didi

javascript - IE 11 忽略动态生成的 html 页面的 appendChild()

转载 作者:数据小太阳 更新时间:2023-10-29 05:28:38 24 4
gpt4 key购买 nike

我正在尝试创建一个伪报告,显示导入数据时出现的错误。为此,我有两个功能:

                let createHtmlErrorReport = (err) => {

let currentDate = new Date().toLocaleString();
let contents = '<!DOCTYPE html> ' +
'<html>' +
'<head>' +
'<title>Import Inventory Import</title>' +
'<meta charset="utf-8" />' +
'<meta http-equiv="Content-Language" content="en">' +
'<style type="text/css">' +
' html { margin:0; }' +
' body { background-color:#d6d6d6; font: 10pt sans-serif;}' +
'ul li{ padding: 3px; font:12pt;}'+
' #header {padding:10px; background-color:#007fcc; color:#ffffff; } ' +
'</style>' +
'</head>' +
'<body>' +
'<div id="header">'+
'<strong>Import Inventory Import</strong>' +
'</div>' +
'<p><strong>Imported ' + currentDate + ' by ' + err.username + ' | ' + err.unprocessedItemsCount + ' items not imported | ' + err.processedItemsCount + ' items imported | '+ err.errorMessages.length + ' errors.</strong></p>'+
'<p>The following errors occured during import: </p>'+
'<div id="errorList" style="padding:5px;"></div>'+
'</body>' +
'</html>';
return contents;

}

在上面,我创建了一个新文档,添加了一些基本样式,然后创建了一个 div 容器,我想在其中插入一个错误列表。

<div id="errorList" style="padding:5px;"></div> 

下一个函数调用此方法并构建错误列表

            let generateImportErrorReport = (errors) => {
let doc = createHtmlErrorReport(errors);
let errorReportWindow = window.open('', '_blank');
errorReportWindow.document.write(doc);
let list = document.createElement('ul');
//builds a list of errors
for (let i = 0; i < errors.errorMessages.length; i++) {
let item = document.createElement('li');
let message = errorReportWindow.document.createTextNode(errors.errorMessages[i]);
item.appendChild(message);
list.appendChild(item);;
}
}

列表只不过是一个字符串数组:

errors.errorMessages = [
{'Message 1'},
{'Message 2'}
]

此代码在 Chrome 和 Firefox 中运行良好,但在 IE 中生成了新文档,但列表永远不会附加到所选元素。我可以看到生成的元素,但它不会添加到新创建的文档中。

IE 开发工具在内部捕获了一条通用消息 Error: No such interface supported

我看到过类似问题的其他 SO 帖子,但没有适合我的方案的解决方案,因为我正在生成 html,同时生成文档与使用现有文档相比。

编辑**:此代码虽然是标准 js,但作为 Angular 应用程序的一部分是用 typescript 编写的。 TS 生成为 ECMA3,使用箭头函数或标准符号生成相同的结果。

对于我遗漏的任何建议或指示,我将不胜感激。

最佳答案

要使其在 IE 11 中运行,您可以关注 Mirko Cianfarani's suggestion :使用将附加这些元素的文档对象创建动态元素。在您的例子中,这是新报告窗口的文档,errorReportWindow.document。报告文件也应在最后关闭。

var generateImportErrorReport = function(errors) {
let doc = createHtmlErrorReport(errors);
let errorReportWindow = window.open('', '_blank');
let errorDoc = errorReportWindow.document; // Get the error report document object
errorDoc.write(doc);
let list = errorDoc.createElement('ul'); // Create with errorDoc
// Builds a list of errors
for (let i = 0; i < errors.errorMessages.length; i++) {
let item = errorDoc.createElement('li'); // Create with errorDoc
let message = errorDoc.createTextNode(errors.errorMessages[i]); // Create with errorDoc
item.appendChild(message);
list.appendChild(item);;
}
var errorList = errorDoc.getElementById('errorList');
errorList.appendChild(list);
errorDoc.close(); // Close the document
}

您可以在这两个 plunker 中测试代码:

关于javascript - IE 11 忽略动态生成的 html 页面的 appendChild(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44852661/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com