我有一个 html 页面,我通过如下所示的 javascript 动态附加 html
<script type="text/javascript" src="/myapp/htmlCode"></script>
我想调用一个js函数,例如loadedContent(); 一旦上面的脚本添加了动态 html。
有人可以帮我怎么做吗?
我有一个 html 页面,我通过如下所示的 javascript 动态附加 html
<script type="text/javascript" src="/myapp/htmlCode"></script>
我想调用一个js函数,例如loadedContent(); 一旦上面的脚本添加了动态 html。
有人可以帮我怎么做吗?
您可以在不使用 head.js javascript 的情况下实现此目的。
function loadScript( url, callback ) {
var script = document.createElement( "script" )
script.type = "text/javascript";
if(script.readyState) { // only required for IE <9
script.onreadystatechange = function() {
if ( script.readyState === "loaded" || script.readyState === "complete" ) {
script.onreadystatechange = null;
callback();
}
};
} else { //Others
script.onload = function() {
callback();
};
}
script.src = url;
document.getElementsByTagName( "head" )[0].appendChild( script );
}
// call the function...
loadScript(pathtoscript, function() {
alert('script ready!');
});
我有同样的问题......我的解决方案(没有 jQuery):
<script onload="loadedContent();" src ="/myapp/myCode.js" ></script>
如果你在 2021 年阅读这篇文章,可能你更习惯 Promises。如果您的所有目标浏览器都支持 ES6 或者您正在使用 polyfill,则更适合使用更现代的方法。
该解决方案与@JaykeshPatel答案类似,但它基于Promise
s:
// definition
function loadScript(scriptUrl) {
const script = document.createElement('script');
script.src = scriptUrl;
document.body.appendChild(script);
return new Promise((res, rej) => {
script.onload = function() {
res();
}
script.onerror = function () {
rej();
}
});
}
// use
loadScript('http://your-cdn/jquery.js')
.then(() => {
console.log('Script loaded!');
})
.catch(() => {
console.error('Script loading failed! Handle this error');
});
您可以在回调的参数中传递一些上下文变量res
,或者如果您的库导入了一些全局符号,您可以在那里引用它。
例如,由于 jQuery 引入了$
全局符号,您可以为其调用res($)
并创建一个本地范围(如果您使用 TypeScript 并且不想在每个文件中声明模块变量,则可以这样编写const $ = await loadScript(..)
)。
如果您不想传递任何参数,则可以像这样缩短代码:
script.onload = res;
script.onerror = rej;
尝试这样的事情
var script = document.createElement('script');
if(script.readyState) { //IE
script.onreadystatechange = function() {
if ( script.readyState === "loaded" || script.readyState === "complete" ) {
script.onreadystatechange = null;
alert(jQuery);
}
};
} else{//others
script.onload = function() {
alert(jQuery);
}
}
script.src = "http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"
document.documentElement.appendChild(script);
实际上你可以把它loadedContent()
作为你正在加载的脚本的最后一行(这是 JSONP 背后的一种概念)
我的答案是Jaykesh Patel 答案的延伸。我已经实现了这段代码以加载多个 javascript。希望这可以帮助某人:
// RECURSIVE LOAD SCRIPTS
function load_scripts( urls, final_callback, index=0 )
{
if( typeof urls[index+1] === "undefined" )
{
load_script( urls[index], final_callback );
}
else
{
load_script( urls[index], function() {
load_scripts( urls, final_callback, index+1 );
} );
}
}
// LOAD SCRIPT
function load_script( url, callback )
{
var script = document.createElement( "script" );
script.type = "text/javascript";
if(script.readyState) // IE
{
script.onreadystatechange = function()
{
if ( script.readyState === "loaded" || script.readyState === "complete" )
{
script.onreadystatechange = null;
callback();
}
};
}
else // Others
{
script.onload = function() { callback(); };
}
script.src = url;
document.getElementsByTagName( "head" )[0].appendChild( script );
debug("javascript included: "+url);
}
// EXAMPLE
var main = function()
{
console.log("main function executed");
}
var js = [ "path/to/script-1", "path/to/script-2", "path/to/script-3" ];
load_scripts( js, main );
这就是你所需要的
await new Promise((resolve) => {
let script = document.createElement("script");
script.onload = () => {
resolve();
};
script.src = "https://example.net/app.js";
document.head.appendChild(script);
});
$.getScript("your script",function () {
"your action";
});