【问题标题】:Script tags with src and code between script tags带有 src 的脚本标签和脚本标签之间的代码
【发布时间】:2013-10-22 05:00:48
【问题描述】:

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

<script src="//blah">

var something = "";

</script>

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

【问题讨论】:

    标签: javascript


    【解决方案1】:

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

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

    【讨论】:

    • 或者有一个脚本遍历每个脚本标签,如果设置了 src 则评估内容
    【解决方案2】:

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

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

    【讨论】:

    • 谢谢,感谢大家的回复,但标准的链接是理想的。
    【解决方案3】:

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

    考虑以下 HTML sn-p:

    <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,以便脚本在全局范围内执行。

    【讨论】:

      【解决方案4】:

      只有在显式处理时才会执行。见:http://ejohn.org/blog/degrading-script-tags。具体来说:

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

      测试 1:验证内部脚本没有被执行,即使一个 外部 src 已加载。

      测试 2:验证内部脚本不是 执行,即使没有加载外部 src。

      这些共同表明内部脚本永远不会加载,除非页面上的脚本采取措施来评估内联代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-30
        • 2022-01-14
        • 2021-06-26
        • 2012-03-13
        • 1970-01-01
        相关资源
        最近更新 更多