删除“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
必须在所有<script defer>
中使用,使其遵循声明的顺序,因此:
<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的主要内容,如果未能解决你的问题,请参考以下文章