【发布时间】:2023-03-05 08:50:01
【问题描述】:
[已解决]
我通常在没有 javascript 的情况下构建页面,然后才添加 javascipt 功能。这样,我可以使用需要使用 javascript 的工具设置所有 div,并使用 display:none,然后在 javascript 的第一行使其可见:
<script type="text/javascript">
$(document).ready(function(){
$('#jsdivs').show();
});
</script>
这样做我不会妨碍那些出于任何原因禁用浏览器 javascript 的人。
遵循这种精神,我想找到一种默认不加载任何 javascript 的方法,然后,如果启用了 javascript,则会有加载 javascript 文件的说明。
现在我正在像这样加载 JQuery(出于缓存原因,很多人可能已经缓存了这个):
<script src="http://code.jquery.com/jquery-1.4.4.js"></script>
还有另一个文件,其中所有其他 javascript 最小化。最后,就在 HTML 正文标记之前。
我看到很多意见 here 和 here 但没有一个可以帮助我解决这个问题。首先,我想知道这是否是完成这项工作的好方法。非常感谢。
更新:
@Lèse majesté 向我指出了一个旧的讨论,说browsers do not load javascript files when it is disabled。由于我认为信息足够确凿,我做了一些测试,通过插件“Web Developer”禁用 Firefox 中的 javascript,并且 YSlow(Firebug 的另一个 FF 插件)继续显示所有 javascript 信息,更不用说“实时标题”(另一个实时显示标题的出色 FF 插件)还显示请求中存在 _utmc cookie(通过 Google Analytics 脚本)。
-
@Marcel Korpel 做了一个非常好的(虽然显然势利) 评论,这为真正的解决方案开辟了道路。他说 Google Analytics 使用“动态包含 ga.js 的方法。需要结束标记(以及立即开始标记)让浏览器更新 DOM 树并实际加载和执行添加的脚本。”
-
有了hisindication的信息,我可以想出这个PHP代码(我不得不把PHP代码放在Pastie.org,因为Stackoverflow搞砸了):
打印出来的:
<script language="javascript" type="text/javascript">
document.write('\<script src\="js\/minified\.js" type\="text\/javascript"\>\<\/script\>');
</script>
这次 YSlow 和 Live Headers 对任何 javascript 文件只字不提。
【问题讨论】:
-
你也可以使用 隐藏它们。这样,您将运行更少的 js,更少的回流,并且在 jQuery 加载时它们将是可见的(如果它不阻止渲染)。
-
无论如何,你不需要
if(1==1)比较,因为如果脚本元素内的代码没有被执行,那么包含外部脚本文件的代码也不会。 -
嘿嘿,我已经怕别人会认为我的这番话是势利或傲慢的,虽然我不是这个意思。 ;-)
-
GA 方法可能是最简单的方法。但是,无论是否启用了 JavaScript 或正在下载 JS 文件,cookie 都应该存在。如果禁用 JS 也禁用了 cookie,那么在会话处理和其他依赖 cookie 的与 JS 无关的事情上,你会遇到一些严重的问题。因此,预计任何预先存在的 cookie 将继续由浏览器发送。
标签: php javascript html unobtrusive-javascript