Javascript 创建一个简单使用document.write()绑定js和css文件的js文件是否存在危险?

Javascript 创建一个简单使用document.write()绑定js和css文件的js文件是否存在危险?,javascript,bundling-and-minification,Javascript,Bundling And Minification,我正在构建一个前端UI框架,供公司的开发人员用于构建内部web应用程序。它由定制引导、jQuery、其他开源库、内部模块和样式表组成。用户环境完全是IE9,我的服务器是.NET3.5。我正在托管共享文件。公司的开发团队将把链接放在他们的项目页面上,并将框架应用到他们的页面上 我想为他们提供实现这一点的最简单方法,那就是粘贴一行代码,为他们构建库。剪切和粘贴30行代码在按下Ctrl+V的那一刻就过时了,这让我无法控制,简直是不雅观 失败的实验 我尝试使用和,它们都使用插入脚本的最佳实践。但它们中的

我正在构建一个前端UI框架,供公司的开发人员用于构建内部web应用程序。它由定制引导、jQuery、其他开源库、内部模块和样式表组成。用户环境完全是IE9,我的服务器是.NET3.5。我正在托管共享文件。公司的开发团队将把链接放在他们的项目页面上,并将框架应用到他们的页面上

我想为他们提供实现这一点的最简单方法,那就是粘贴一行代码,为他们构建库。剪切和粘贴30行代码在按下Ctrl+V的那一刻就过时了,这让我无法控制,简直是不雅观

失败的实验

我尝试使用和,它们都使用插入脚本的最佳实践。但它们中的每一个都会导致在样式化之前显示内容,或者在加载脚本之前调用方法。我放弃了这种方法。 太不稳定了

一个简单的document.write()解决方案

在周末,我想:为什么我不制作一个名为“framework,js”的js文件,添加脚本和链接文件,然后用一堆document.write()行来排列。告诉开发者把它放在头上,就这样。见鬼,我可以为IE9和mobile添加必要的元标记。它是如此肮脏和简单。。。但这可能会奏效

用户群位于内部网络上,规模有限。带宽不是问题。在选择此选项之前,我将测试性能。我可以指导开发团队放置链接的位置

知道这一点并提供它确实有效,有什么理由我不应该这样做吗?


我唯一的另一个选择是在服务器上进行捆绑。我希望不必求助于此,因为我自己并不拥有服务器,也不是.NET开发人员。

您提出的方法非常适合您的情况。与更复杂的解决方案相比,它有几个优点,包括完全的简单性、完全可预测的执行顺序,以及与可能不适合异步加载的脚本完全兼容。我已经在生产应用程序中多次使用它,就像许多其他开发人员一样

当然,其他解决方案也有它们的优点,但是对于您正在做的事情来说,好的
document.write()
并没有什么错

听起来您有很多脚本和样式表,可能是从公共目录(或公共根目录)加载它们。为了减少
framework.js
文件中的重复,您可能需要定义两个函数,一个用于为CSS编写
标记,另一个用于为JavaScript编写
标记。因此,骨架
framework.js
文件可能如下所示:

(function() {
    var scriptBase = 'js/';
    var styleBase = 'css/';

    function writeStyle( name ) {
        document.write(
            '<link rel="stylesheet" href="', styleBase, name, '">',
            '</link>'
        );
    }

    function writeScript( name ) {
        document.write(
            '<script src="', scriptBase, name, '">',
            '</script>'
        );
    }

    writeStyle( 'one.css' );
    writeStyle( 'two.css' );

    writeScript( 'one.js' );
    writeScript( 'two.js' );
})();
(函数(){
var scriptBase='js/';
var styleBase='css/';
函数writeStyle(名称){
document.write(
'',
''
);
}
函数writeScript(名称){
document.write(
'',
''
);
}
writeStyle('one.css');
writeStyle('two.css');
writeScript('one.js');
writeScript('two.js');
})();
请注意,您不必像在使用
document.write()的代码中看到的那样对
文本进行任何特殊转义。只有将此代码直接放入HTML文件中的
标记时,才需要这样做。该转义的目的是防止
document.write()
调用中的
文本关闭封闭的
标记。由于您的代码位于外部
.js
文件中,因此这不是问题:此文件中的
文本不会终止
.js
文件

要记住的另一点是,在
.js
文件中进行的所有
document.write()
调用都会插入到编写它们的
.js
文件之后的文档中。因此,不要期望能够在
framework.js
内编写
document.write()
,然后在
framework.js
内编写其他代码,这取决于您刚刚编写的
.js
文件。所有这些
.js
文件(和
.css
)都是在
framework.js
之后加载的,而不是与之交错


当然,还有一个考虑因素是加载时间。如果合并并缩小CSS和JS文件,页面加载速度会更快。但如果这些是内部网络应用,页面加载时间可能是你最不担心的:可靠性和可维护性可能更重要。在任何情况下,您都可以使用
document.write()
解决方案立即启动并运行,然后仅在不太可能的情况下进行优化。

是的,您疯了。。。这就是你想要的吗?改写成更有建设性的。电子寿司,没有人会关闭javascript。这些都是内部网络应用程序。它工作起来很有魅力。在我的测试中,页面负载在初始负载时约为200毫秒,在后续负载时约为100毫秒。文件是按准确的顺序加载的。我也试过写IE元标签,但IE抱怨页面已经定稿了。谢谢你的鼓励。我会把答案留待一段时间,这样其他人可能会插话,但我们看起来不错。这很有效。页面负载平均为100毫秒。不同的开发平台。谢谢你鼓励我走这条路。