【发布时间】:2020-07-20 00:04:33
【问题描述】:
我们需要向我们的 Web 应用程序添加一个脚本。它基本上添加了一个公司菜单。
所以我们收到了一个脚本,可以包含在我们的 Web 应用程序主体中:
<!-- BEGIN NAVIGATION -->
<script type="text/javascript" src="https://intranet.local/?getCorporateJsMenu"></script>
<!-- END NAVIGATION -->
而https://intranet.local/?getCorporateJsMenu的内容基本上是这样的:
document.write('<script type="text/javascript" src="..."></script>');
//....
document.write('<div>');
document.write('<ul>');
//...
document.write('<li><a href="...">...</a></li>');
//...
document.write('</ul>');
document.write('</div>');
在将<!--NAVIGATION--><script... 直接放入 HTML 正文后,我们遇到了严重的页面加载性能问题。
所以我们的想法是使用 JavaScript 添加菜单,此时所有内容都已加载如下内容:
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'https://intranet.local/?getCorporateJsMenu';
var domparent = jQuery('#header').get();
domparent[0].appendChild(script);
通过Firebug,我们看到,脚本元素已添加到 HTML 内容中,并且脚本已从网络加载,但不知何故,加载脚本的 document.write 没有被执行。为什么?
https://intranet.local/?getCorporateJsMenu的内容来自第三方,我们无法修改。
【问题讨论】:
-
doc.write 将提高性能。您可以重新定义该方法并将调用收集在一个数组中以实现穷人的输出缓冲。然后像 .innerHTML=arrWrites.join(" ");
-
@dandavis 其实
document.write()是动态创建内容的最快方式... -
@Teemu:我不知道如何创建内容,或者你如何定义“最快”,但是 doc.write 对页面加载性能有充分的记录……
-
@JMW 在您更新之后,看来您唯一的机会是联系供应商,并要求他们修复脚本,或更改供应商...
-
我看不到任何覆盖第三方代码的方法,因为您无法访问跨域文档。而且在这种特殊情况下,错误是在解析时引起的,即使是您自己的代码,也无法修复它,而无需更正实际文件中的代码。