删除“text/javascript”属性时未定义 Jquery

Posted

技术标签:

【中文标题】删除“text/javascript”属性时未定义 Jquery【英文标题】:Jquery is not defined when remove "text/javascript" attribute 【发布时间】:2021-12-14 11:55:47 【问题描述】:

可行的方案:

我有一个通过WEBPACK 生成的APP_FRAMEWORK.JS 文件,其中包括BOOTSTRAP AND JQUERY

<script type="text/javascript" src=" asset('js/app_framework.js') " defer></script>

@if(!empty($assets['js']))
    @foreach ($assets['js'] as $js)
        <script type="text/javascript" src=" asset($js) "></script>
    @endforeach
@endif

如果我按照示例加载页面,它可以完美运行,在下面的循环内加载的脚本中没有任何错误。

我的问题:

为什么,如果我在加载MAIN SCRIPT (APP_FRAMEWORK.JS) 时删除“text/javascript”,就会开始出现$ is not defined 错误? 记住这个TYPE 不再是强制性的,脚本以正确的顺序加载并且有一个DEFER!!!

【问题讨论】:

您使用的是哪个版本的 jQuery? "如果我删除 "text/javascript"" 你删除 "text/javascript"type="text/javascript"? type="text/javascript" 版本:"version": "3.6.0" type="text/javascript" 没问题,只是不要defer jquery 【参考方案1】:

    强制浏览器不从缓存加载脚本(SHIFT + RELOAD 在 Mac 上) 通过这样做,我们已经看到 APP_FRAMEWORK.JS 在其他人之后被加载。

    另外一点,defer 不会阻止加载其他脚本,直到那些定义了它的脚本执行它们的进程。 defer 属性的定义更进一步,是:

    defer 属性告诉浏览器仅在 html 解析完成时才运行脚本。 该脚本将被异步请求,它的下载将完成,只有当 HTML 文档的分析完成时,它才会被执行。即使完整的脚本下载发生在完整的 HTML 解析之前,它也不会在稍后运行。 如果您有多个带有defer 属性的脚本元素, 它们将被并行请求并按规定的顺序执行。

    由于脚本位于页面底部,因此无需使用defer,因为它永远不会停止解释 HTML 以下载任何 JS。

    问题本身与type="text/javascript"无关,一切都与加载脚本的大小、下载时间有关,从依赖和执行的顺序来看。

    如果你真的需要遵循一个JS加载顺序,defer必须在所有&lt;script defer&gt;中使用,使其遵循声明的顺序,因此:

<script defer src=" asset('js/app_framework.js') " defer></script>
<script defer src=" asset('js/app.js') "> others ...</script>

@if(!empty($assets['js']))
    @foreach ($assets['js'] as $js)
        <script defer src=" asset($js) "></script>
    @endforeach
@endif

参考链接:https://www.braziljs.org/p/diferencas-entre-async-e-defer

现在来了一个不想闭嘴的问题...... 为什么即使以正确的顺序从缓存中加载文件,浏览器也会显示消息?

有没有人根据这些文件从浏览器中听说过error cache?就像,看到脚本是一样的,这些脚本的最后一次执行出错并且已经自动显示错误?

【讨论】:

以上是关于删除“text/javascript”属性时未定义 Jquery的主要内容,如果未能解决你的问题,请参考以下文章

删除 $_SESSION 时未定义的索引

使用 QWebChannel 时未定义的属性和返回类型

使用删除与隐藏时未调用自定义动画

在 laravel 4 中加载视图时未定义的 $load 属性

Vue组件用作插槽的子项时未定义的属性

执行删除规则时未调用自定义对多关系访问器方法