一旦加载了特定的第三方脚本,我可以触发函数吗
Can I trigger a function once a specific third party script has loaded?
我想触发一个函数尽快运行,但它需要等待另一个(第三方)脚本完成加载,否则还没有定义合适的变量。
我可以监听特定的脚本来完成加载并将函数绑定到该事件吗?
我需要代码,所以:
加载时:
<script src="https://www.officeball.biz/socket.io/socket.io.js"></script>
运行此:
function(){ console.log('socket ready!'}`
我似乎可以修改第三方脚本来调用函数,但在这种情况下不行:socket.io是一个动态生成的脚本,我无法控制它的源代码。
另一种选择是等待文件加载;这个问题是为了尽快运行脚本。
您可以创建一个脚本并添加到头部:
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'https://www.officeball.biz/socket.io/socket.io.js';
document.getElementsByTagName('head')[0].appendChild(script);
script.onload = function() {
console.log( 'loaded' );
}
这个例子可以被包装成一个函数并添加到文档头:
<script>
function load_script( src, callback ) {
var script = document.createElement('script');
script.src = src;
document.getElementsByTagName('head')[0].appendChild(script);
script.onload = callback;
}
</script>
而且,它以后可以这样使用:
load_script( 'https://www.officeball.biz/socket.io/socket.io.js', function() {
console.log( 'socket ready!' );
});
此外,作为对您评论的回应,还可以创建一个具有id
和data
属性的脚本标记:
<script id="socket-io" data-src="https://www.officeball.biz/socket.io/socket.io.js" type="text/javascript"></script>
为了稍后添加src
属性,脚本在设置src
属性的那一刻开始加载:
var script = document.getElementById( 'socket-io' );
script.src = script.getAttribute( "data-src" );
script.onload = function() {
console.log( 'socket ready!' );
}
当然,这可以封装在一个函数中,例如:
<script>
function load_script( id, callback ) {
var script = document.getElementById( id );
script.src = script.getAttribute( "data-src" );
script.onload = callback;
}
</script>
最后:
load_script( 'socket-io', function() {
console.log( 'socket ready!' );
});
相关文章:
- 我可以在json对象中添加一个函数吗
- AngularJS:我可以跳过函数参数回调吗
- 使用JAVASCRIPT转换货币.可以't通过我的函数设置转换后的输入文本字段的值
- 我可以将函数导入到typescript类文件中吗
- 为什么我可以't直接将console.log()设置为回调函数
- 我可以从内部函数中产生吗?
- 我可以将哪些事件附加到jQuery's on()函数
- Chrome扩展和Angular:我可以把Chrome.runtime.sendMessage变成一个同步函数吗
- 我可以将javascript绘制函数更改为图像吗
- 使用角度图时,我可以用函数定义数据点颜色吗
- 我可以在javascript中的回调函数中为变量赋值吗
- 我可以获得用Ajax调用的函数的返回代码吗
- 当数组中的某个函数没有返回promise时,我可以使用$q.all吗
- JavaScript 新手:我可以将列表传递到这个函数中并让它仍然工作吗?
- 我可以通过使用函数绑定来保留默认值吗?如果没有,为什么
- 我可以在 TypeScript 中扩展函数吗?
- 我可以在不编写函数的情况下使用 scrollTop 吗?
- 我可以使用一个函数让所有复选框都被选中或取消选中吗(不使用点击触发器)
- 当访问文件时,我可以自动调用例程或函数吗
- 在剑道网格中,我可以用一个函数动态设置列属性吗