gpt4 book ai didi

javascript - document.createElement ("script") 同步

转载 作者:IT王子 更新时间:2023-10-29 02:50:06 27 4
gpt4 key购买 nike

是否可以同步调用.js文件,然后立即使用?

<script type="text/javascript">
var head = document.getElementsByTagName('head').item(0);
var script = document.createElement('script');
script.setAttribute('type', 'text/javascript');
script.setAttribute('src', 'http://mysite/my.js');
head.appendChild(script);

myFunction(); // Fails because it hasn't loaded from my.js yet.

window.onload = function() {
// Works most of the time but not all of the time.
// Especially if my.js injects another script that contains myFunction().
myFunction();
};
</script>

这是简化的。在我的实现中,createElement 的东西在一个函数中。我想在函数中添加一些东西,可以在返回控制权之前检查某个变量是否被实例化。但是当包含我无法控制的另一个站点的 js 时,仍然存在该怎么做的问题。

想法?

编辑:

我暂时接受了最佳答案,因为它很好地解释了正在发生的事情。但是,如果有人对如何改进这一点有任何建议,我会向他们开放。这是我想做的事情的一个例子。

// Include() is a custom function to import js.
Include('my1.js');
Include('my2.js');

myFunc1('blarg');
myFunc2('bleet');

我只想避免了解太多内部结构,而只是想说,“我想使用这个模块,现在我将使用其中的一些代码。”

最佳答案

您可以创建自己的 <script>带有“onload”处理程序的元素,当浏览器加载和评估脚本时将调用该处理程序。

var script = document.createElement('script');
script.onload = function() {
alert("Script loaded and ready");
};
script.src = "http://whatever.com/the/script.js";
document.getElementsByTagName('head')[0].appendChild(script);

你不能同步进行。

编辑 — 确实有人指出,IE 不会在 <script> 上触发“加载”事件正在加载/评估的标签。因此,我想接下来要做的是使用 XMLHttpRequest 获取脚本,然后是 eval()它自己。 (或者,我想,将文本填充到您添加的 <script> 标记中;eval() 的执行环境受本地范围的影响,因此它不一定会执行您希望它执行的操作。)

编辑截至 2013 年初,我强烈建议研究更强大的脚本加载工具,如 Requirejs .有很多特殊情况需要担心。对于非常简单的情况,有 yepnope , 现在内置于 Modernizr 中.

关于javascript - document.createElement ("script") 同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3248384/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com