【问题标题】:How not to load javascript files when javascript is disabled禁用javascript时如何不加载javascript文件
【发布时间】: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 正文标记之前。

我看到很多意见 herehere 但没有一个可以帮助我解决这个问题。首先,我想知道这是否是完成这项工作的好方法。非常感谢。

更新:

  • @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搞砸了):

    http://pastie.org/1487432

打印出来的:

<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


【解决方案1】:

如果禁用 JavaScript,大多数浏览器不会下载链接的 .js 文件。看到这个问题:

Does a browser download JS files if the user has JS disabled?

【讨论】:

  • 如果 javascript 被插件(如 Web Developer,存在于 Chrome 和 FF 中)阻止怎么办?
【解决方案2】:

您可以动态添加javascript文件,但是内容不会被评估并且对您不可用(因为javascript被加载和解析一次),所以这种方法不起作用可以看出here.

如果您能够通过查询字符串参数、表单字段或任何您喜欢的方式将此信息(禁用 JavaScript)传回服务器,您也可以使用服务器端脚本并避免写出脚本标签。

但是,请考虑所涉及的复杂性以及这是否能为您节省任何费用。

说实话,如果 javascript 关闭,我不知道浏览器对这些文件的行为如何 - 可以合理地假设(尽管应该始终检查)如果 javascript 关闭,则不会请求任何 javascript 文件要么。

更新:

正如here 所见,如果禁用了 javascript,大多数浏览器不会下载 js 文件。

【讨论】:

  • 您可以通过将script 元素添加到文档的head 来动态包含外部脚本。只是不要忘记关闭当前脚本元素。
  • @Marcel - 这些动态添加的脚本会被 JS 引擎解析和执行吗?你能指出这是在哪里得到证实的吗?
  • 坦率地说,我有点惊讶这个问题突然出现并且其他人赞成它,因为我认为这或多或少已经是常识。显然,它不是。例如,Google Analytics 使用此方法动态包含 ga.js。需要结束标记(和立即开始标记)让浏览器更新 DOM 树并实际加载和执行添加的脚本。
  • @Marcel - 你会惊讶于你所期望的不常见的信息量。
  • 是的,没错。更糟糕的是,人们仍然指出毫无希望的互联网教程,当我说它们很糟糕(原因)时,他们承认他们认为它们实际上相当不错。
猜你喜欢
  • 1970-01-01
  • 2017-05-03
  • 1970-01-01
  • 2016-07-25
  • 1970-01-01
  • 2010-10-09
  • 1970-01-01
  • 2011-09-11
相关资源
最近更新 更多