我有以下问题: 我在一个模态对话框中加载一个页面。该页面使用jQuery作为依赖项。因为我已经在主页面上使用了jQuery,对我来说,它始终可用。现在我们有了用例,如果需要,不同页面(托管在不同域上)也需要加载该页面。
因此,我检查此页面上是否存在jQuery变量,如果是,请继续使用我的代码。
如果它不存在,在模板顶部,我动态创建一个这样的脚本元素:
(function ($) {
.... code ....
})(jQuery);
在模板的最后,我使用IIFE(范围jquery变量)
var xhrObj = new XMLHttpRequest();
// open and send a synchronous request
xhrObj.open('GET', "jquery.min.js", false);
xhrObj.send('');
// add the returned content to a newly created script tag
var se = document.createElement('script');
se.type = "text/javascript";
se.text = xhrObj.responseText;
document.getElementById('placeholder').appendChild(se);
但是,由于使用此方法,脚本会异步加载,有时我会收到错误:jQuery未定义。
现在我通过同步加载来实现,如下所示:
if (!window.jQuery) {
document.write('<scr' + 'ipt src="jquery.js"' + '>' + '</scr' + 'ipt>');
}
这很好用,但主线程上的警告&#34;同步XMLHttpRequest因其对最终用户体验的不利影响而被弃用。最终用户的体验。&#34;让我思考。
然而,现在我改变了我的代码,只是说了
#include<set>
#include<iostream>
using namespace std;
int main(int argc, char** argv)
{
set<int> A, B;
A.insert(1);
int n = atoi(argv[1]), i;
for(i=1; A.find(n) == A.end(); i++) {
for(auto& a : A) for(auto& b : A) B.insert(a + b);
for(auto& c : B) A.insert(c);
}
cout << i << endl;
}
在我的模板上。
亲爱的javascript大师,这是一个可靠的解决方案吗?
答案 0 :(得分:1)
在async javascript中使用onload属性
<script async src="siteScript.js" onload="window.MyInitialisation()"></script>
在javascript中它看起来像这样:
<script>
if(!window.jQuery)
{
var script = document.createElement('script');
script.type = "text/javascript";
script.async = "async";
script.defer = "defer";
script.onload = function() {window.MyInitialisation()}
script.src = "path/to/jQuery";
document.getElementsByTagName('head')[0].appendChild(script);
}
</script>