如何使用vuejs在新窗口中生成HTML



我目前在生成表时遇到了一个支持uniCode的jsPDF问题,为了跳过这个问题,我使用了浏览器打印功能,只需创建一个带有表的新html并将其显示为弹出窗口,然后调用popup_window.print(),如下所示:

//exporter.ts

const temp = document.createElement("div");
temp.innerHTML = tableHtml(
tableHead,
tableBody,
fileName
);
const popup_window: any = window.open(location.origin, fileName, "x=y");
popup_window.document.write(temp.innerHTML); 
setTimeout(() => {
popup_window.print();
popup_window.close();
}, 1000);

//tableHtml.ts

const tableHtml = (
headers: string[],
records: GeneralOBJ[],
title: string,
direction = "rtl"
) => `<!DOCTYPE html>
<html>
<body>
<main id="main" style="direction: ${direction};">
<h1>${title}</h1>
<div class="app_table">
<table class="table">
<thead>
<tr>
${headers
.map(header => "<th class='col' dir='auto'>" + header + "</th>")
.join("")}
</tr>
</thead>
<tbody>
${records
.map(
record =>
"<tr>" +
Object.values(record)
.map(td => "<td dir='auto'>" + td + "</td>")
.join("") +
"</tr>"
)
.join("")}
</tbody>
</table>
</div>
</main>
</body>
</html>`;

它运行得很好,但正如您所知,这里可能会出现像xss这样的安全问题。所以,我想用vue来生成这个html的peice,然后把它添加为temp.innerHTML,你知道怎么做吗?

VueJS是一个单页应用程序库,使用它可以在一个html文件中呈现所有内容。在不同的html页面中创建两个或多个Vue实例是可能的,但您必须将其设置为共享相同的存储/数据。

让它尝试工作的一种方法可能是创建一个包含弹出内容的组件,然后在弹出html窗口上创建另一个Vue实例,并在那里安装组件。也许您可以在这里了解如何以编程方式创建组件实例的CSS技巧。

如果我是这样的话,我会先找到一个最简单的解决方法。如果问题是unicode支持,我会找到一个替代库。检查这个关于pdf生成中unicode的另一个SO线程。

相关内容

  • 没有找到相关文章

最新更新