脚本标记,脚本标记之间有 src 和代码

Script tags with src and code between script tags

本文关键字:脚本 代码 src 之间      更新时间:2023-09-26

以下JavaScript有效吗?该变量是否可用于外部调用的脚本?

<script src="//blah">
var something = "";
</script>

背景:我已经看到它在自动生成的分析代码(不是谷歌)中使用,这真的让我很恼火,所以想知道我是否可以解决这个问题,或者这个变量是否会以某种方式被外部引用的脚本使用。

阅读本文,http://www.w3.org/TR/html4/interact/scripts.html#h-18.2.1

脚本可以在 SCRIPT 元素的内容中或在外部文件中定义。如果未设置 src 属性,则用户代理必须将元素的内容解释为脚本。如果 src 具有 URI 值,则用户代理必须忽略元素的内容并通过 URI 检索脚本。请注意,charset 属性是指由 src 属性指定的脚本的字符编码;它与 SCRIPT 元素的内容无关。

不,不是,如果您引用源代码,则忽略脚本标记之间的代码。你可以这样做:

<script src="bla.js"></script>
<script>
var something = "";
</script>

它仅在显式处理时才执行。 请参阅:http://ejohn.org/blog/degrading-script-tags。 具体说来:

我们可以通过一些测试来验证这两个事实:

测试 1:验证内部脚本是否未执行,即使 已加载外部 SRC。

测试 2:验证内部脚本是否不是 执行,即使未加载外部 SRC。

这些共同表示永远不会加载内部脚本,除非页面上的脚本执行操作来评估内联代码。

不,不可能直接做你正在做的事情。但是,您可以使用一个聪明的小技巧来启用它:http://ejohn.org/blog/degrading-script-tags/

请考虑以下 HTML 代码段:

<script src="external.js">
    var something = "";
</script>

将以下代码添加到external.js文件的末尾:

var scripts = document.getElementsByTagName("script");
var length = scripts.length;
var script = scripts[length - 1].innerHTML;
eval(script);

但请注意,必须间接调用eval,以便在全局范围内执行脚本。