我不明白替换这个的原因:
<script src="js/example.js"></script>
Run Code Online (Sandbox Code Playgroud)
有了这个:
$.getScript('js/example.js', function() {
alert('Load was performed.');
});
Run Code Online (Sandbox Code Playgroud)
有没有特别的理由使用jQuery版本?
我有一些使用相同的javascript代码的coldfusion文件.我想将javascript分成一个.js文件并将其包含在每个文件中,这样我就不必多次重复所有内容.所以,我将javascript代码分成了一个名为"myPage.js"的文件,而在"myPage.cfm"中我添加了一个脚本标记 -
<script language="javascript" src="myPage.js"></script>
Run Code Online (Sandbox Code Playgroud)
问题是在javascript之间传播了一些使用<cfoutput>s等注入值的冷却代码,并且不再正确翻译,可能是因为它试图将其作为纯javascript读取.有没有办法我可以有一个外部的js文件,但表明我希望它使用coldfusion来解释它?
我找到的一个解决方法是将javascript放入coldfusion文件而不是javascript文件,称为"myPageJavascript.cfm",包围<script type="text/javascript">标签中的所有javascript代码,然后使用cfinclude将javascript包含在所有页面.这样可以正常工作,但在我看来并不像包含js文件一样直观......对于这样的情况,标准做法是什么?有没有办法将其作为外部js文件实现,还是应该坚持我的coldfusion模板文件?
为什么Firefox随机停止加载<script>用js动态添加的标签?
在这张图片上,我动态加载这些脚本,然后将它们添加到dom中
相当随机,结果就是这样,动态加载的随机脚本和其他脚本(7-15s之间)之间存在很大的滞后
我实际上加载了我的脚本
function(url, callback){
var elem = document.createElement("script");
elem.async = true;
elem.src = url;
elem.type = "text/javascript";
elem.onload = callback;
document.getElementsByTagName("body")[0].appendChild(elem);
}
Run Code Online (Sandbox Code Playgroud)
编辑:
当我在我的html页面中添加脚本标签时,滞后不会出现,它只会在我用JavaScript加载脚本时出现.但实际上我需要用JavaScript加载这些脚本.
有一个小 提示的错误https://jsfiddle.net/ccgb0hqr/如果警报显示立即刷新页面,直到错误发生
我正在我的</body>标签之前从外部源加载一些JS .我正在尝试看看如果服务器在尝试服务这个第三方JS时挂起会发生什么.似乎我页面上的所有内容都运行良好,但浏览器仍然在旋转,就像页面仍在加载一样.有没有办法以这样的方式加载这个JavaScript,浏览器不会等待它声明页面完全加载?
作为参考,我尝试了以下两种方法来异步加载我的JS:
<script>
var resource = document.createElement('script');
resource.src = "https://myserver.com/js/myjs.js”;
var script = document.getElementsByTagName('script')[0];
script.parentNode.insertBefore(resource, script);
</script>
Run Code Online (Sandbox Code Playgroud)
和
<script async src="https://myserver.com/js/myjs.js"></script>
Run Code Online (Sandbox Code Playgroud) 考虑以下两行:
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<meta http-equiv="Content-Style-Type" content="text/css" />
Run Code Online (Sandbox Code Playgroud)
作者应通过在HEAD中包含以下META声明来为文档中的所有脚本指定默认脚本语言
然而,它继续在脚本语言的本地声明中说:
必须为文档中的每个SCRIPT元素实例指定type属性.SCRIPT元素的type属性的值将覆盖该元素的默认脚本语言.
在我看来,这里有一个过度规范.为什么都在meta和每script类中声明?如果我们"必须"单独声明每个标签,那么强制性默认的重点是什么?
要么让默认的是默认的,或者只是指出,每个标签需要它自己的类型-或者是使用的措辞这里只是让我绊倒了?同样的语言也用于参考样式表.
所以我尝试添加这样的延迟脚本标签
const script = document.createElement('script');
script.setAttribute('src', '/script.js');
script.setAttribute('type', 'text/javascript');
script.setAttribute('defer', true);//this is the code in question!
document.getElementsByTagName('body')[0].appendChild(script);
Run Code Online (Sandbox Code Playgroud)
但是我发现结果脚本标签会生成defer属性,defer=true而不仅仅是defer.
它们是一样的吗?什么是暗示,如果我做的defer=true,而不是defer?
谢谢!
如果我们比较网页和链接的 JavaScript 文件的这两个选项:
<script src="...">网页末尾,而不是<head>部分但使用<script defer src="..."> 如果怎样的机制defer的工作原理是在本页面描述的,这个其他页面,在Mozilla,而defer在几乎所有的现代浏览器都支持,那么是不是它只是更好地利用选项#2以上?
原因是,选项 1 和 2 的工作方式完全相同,除了选项 #2,JavaScript 文件的下载可以与 HTML 文件的解析(和呈现)并行。所以如果下载时间是0.2s或0.5s,这个时间就可以省了。如果 JS 向页面添加元素或启动页面中的任何动态或交互元素,则这对于 SPA(单页应用程序)或旧式网页来说是正确的。
唯一的例外是,如果浏览器足够聪明,在解析上述选项 1 中的整个 HTML 文件之前,它已经“收集”了所有 JS 文件 URL 并在 HTML 文件解析到最后或到<script>标签的点。但这将使选项 1 和 2 的工作完全相同,因此对于不这样做的浏览器,选项 2 仍然会更快?
PS话虽如此,我认为有一个问题:由于HTTP / 1.1规范建议浏览器一次最多从同一主机名下载2个项目,因此如果正在下载JS文件并占用一个位置,则一些图像文件可以更慢地到达。(如果 JS 和图像来自相同的主机名)
无法理解我刚刚在关于deno bundle命令的 Deno 手册部分末尾阅读的两个示例之间的区别:
捆绑包也可以在 Web 浏览器中加载。bundle 是一个自包含的 ES 模块,所以 type 属性必须设置为“module”。例如:
Run Code Online (Sandbox Code Playgroud)<script type="module" src="website.bundle.js"></script>或者您可以将其导入另一个 ES 模块以使用:
Run Code Online (Sandbox Code Playgroud)<script type="module"> import * as website from "website.bundle.js"; </script>
我的印象是这两种形式都达到了相同的效果(即“在浏览器继续解析页面之前立即获取并执行”),而后者用于跟随脚本或想要缩小导入的范围(例如,如本答案所示)。
第16.6.1.2模块中的探索ES6书出现这一评估同意。
Reddit 线程差异 Es6 导入模块 vs 脚本 src=""似乎也证实了这一点:“不是将整个库转储到您的全局范围内,而是只包含您需要和实际使用的内容。 ”
这可能被认为是其他问题的重复(见列表底部),但这些答案对我没有多大帮助,而且辅助资料似乎也没有表明我的假设是否正确。(另一方面,我很有可能忽略了一些明显的东西,并且不得不提高我的阅读理解能力......)
最近几个月我读了很多关于浏览器和跨域请求的同源策略。
我一直在想,为什么<script>标签不是它的一部分?我发现这个问题被问了好几次,也在 stackoverflow 上,但所有的回复都没有回答为什么它不是它的一部分。
这是由于历史原因还是这种想法背后的背景是什么?
我希望有人可以帮助我解决这个问题。
我有一个用 ReactJS 制作的网站。在 中public/index.html,我有
<head>
<script src="/lib/analyzejs-v1.js"></script>
<script src="/lib/analyzejs-v2.js"></script>
</head>
<body>
<div id="root"></div>
</body>
Run Code Online (Sandbox Code Playgroud)
其中analyzejs-v1.js有 6Mo,并且analyzejs-v2.js有 3Mo;它们都是固定文件,我无法对其进行太多修改。
这两个文件不是模块;它们的功能已声明(例如,declare function f1(address: string): string;在 中src/defines/analyzejs-v1.d.ts)。analyzejs-v1.js因此,某些组件通过使用函数名称直接调用函数f1(...),无需任何命名空间、导入或导出。其余组件analyzejs-v2.js通过使用函数名称f2(...)直接调用函数,无需任何命名空间、导入或导出。
加载这两个js库文件需要时间。所以我正在寻找一种方法来加载analyzejs-v1.js或analyzejs-v2.js根据组件(或 URL)。
那么有谁知道为不同组件加载不同JS库文件的常规方法吗?
script-tag ×10
javascript ×8
html ×2
ajax ×1
asynchronous ×1
browser ×1
coldfusion ×1
cross-domain ×1
deno ×1
es6-modules ×1
firefox ×1
getscript ×1
hamlet ×1
jquery ×1
loading ×1
reactjs ×1
setattribute ×1
stylesheet ×1
w3c ×1
webpack ×1