2016-10-13 206 views
0

对于餐馆网站,我需要使用预订模块来加载痛苦。
加载它的脚本花费高达4秒的时间,这是在我开始工作的380mb/s以太网连接上。网站需要4到6秒才能生效。在执行脚本之前等待外部动态加载的脚本加载

这是我必须执行的代码。

<div id="[reservation-company-name]-booknow"> 
    <script type="text/javascript" src="//www.[reservation-company-name].com/WID/Widget/Cors"></script> 
    <script>bookNow({companyID: '[numbers]',target: '#[reservation-company-name]-booknow',language: 'NL'});</script> 
</div> 

保留小部件隐藏在主页上,但这仍然意味着脚本将在网页中加载。
我知道我必须在页面完全加载后动态加载脚本。

$(window).load(function() { 
    $("#[reservation-company-name]-booknow").append("<script type='text/javascript' src='//www.[reservation-company-name].com/WID/Widget/Cors'></script><script>bookNow({companyID: '[numbers]',target: '#[reservation-company-name]-booknow',language: 'NL'});</script> 
}); 

问题是,第二个带bookNow函数的脚本在第一个脚本仍在加载时触发。这会导致错误,并且小部件将无法正常加载。
当我在运行第二个脚本时设置超时时,窗口小部件将加载,但使用不同的连接速度时,无法在超时设置正确的时间。

我在这里搜索了Stackoverflow关于如何等待动态加载的脚本在执行函数之前完全加载。 我发现的大多数东西都不是关于动态加载的脚本,或者是关于异步和延迟,这对我没有用。

怎么办?

+1

仅供参考'$(window).load()'不推荐使用。使用'$(window).on('load')'。 – Barmar

回答

0

嗯,我自己找到了解决方案,只是想把它留在这里找别人去找,因为我无法在这里找到答案。

Jquery has a nice getScript function加载脚本,然后运行一个函数。正是我在找什么。

$(window).load(function() { 
    var url = "//www.[reservation-company-name].com/WID/Widget/Cors"; 
    $.getScript(url, function() { 
     $('#[reservation-company-name]-booknow').append("<script>bookNow({companyID: '686937',target: '#[reservation-company-name]-booknow',language: 'NL'});</script>"); 
    }); 
});