javascript - 在继续来自同一个js文件的另一个代码之前添加两个脚本标记(在正文中)

时间:2017-02-08 22:39:39

标签: javascript html

如何修改以下代码?我想在从函数void func2(std::vector<std::vector<int>> &my2DArrayAsRef) { int row = 2; int column = 1; int cellAtRow_Column = my2DArrayAsRef[row][column]; printf("value at [%d][%d] is %d (should be 7)\n", row, column, cellAtRow_Column); } int main(void) { std::vector<std::vector<int>> myArray2 = { {0,1,2},{3,4,5},{6,7,8} }; func2(myArray2); return 0; } 添加下一个代码之前加载完全两个脚本。有人可以给初学者一个暗示吗?我在评论后给出了我的建议//.

yourCodeToBeCalled

我借用的原始代码:link

3 个答案:

答案 0 :(得分:2)

好的,我找到了逐个执行脚本的方法。由于加载脚本的顺序不正确,不再出现错误,例如:当下一个脚本使用jQuery命令时缺少jQuery框架。所以我决定使用 promises 情况下。

var loadJS = function(url) { /*url is URL of external file*/
    return new Promise(function(resolve, reject) {
        var scriptTag = document.createElement('script');
        scriptTag.type = 'text/javascript';
        scriptTag.setAttribute('nonce', '22os9h3sdfa');
        scriptTag.onload = resolve;
        scriptTag.onerror = reject;
        scriptTag.src = url;
        document.body.appendChild(scriptTag);
    });
};

loadJS('js/jquery-3_1_1.min.js').then(() => { return loadJS('js/library.js'); }).then(() => {

    var $ = jQuery.noConflict();//jQuery.noConflict();
});

现在'jquery-3_1_1.min.js'在'library.js'之后执行

问候!

答案 1 :(得分:1)

我不确定您为什么要将脚本元素添加到location元素。 而不是

location.appendChild(scriptTag);

您可能想尝试

document.body.appendChild(scriptTag);

答案 2 :(得分:1)

假设我正确理解您的要求,loadJS是一个函数,所以只需调用它两次,然后调用您的代码:

(function() {
  var head = document.getElementsByTagName('head')
  loadJS('somescript.js', function() { console.log('on load') }, head)
  loadJS('somescript2.js', function() { console.log('on load2') }, head)

  // This is your code to execute once the scripts have loaded.
  console.log('Okay');
})();

此外,您还要从scriptTag.async = true;中删除loadJS行,以便强制它等到加载后继续执行。

编辑:根据您最近的更改,您可以省略中间参数(回调),不需要它。

编辑:鉴于您的最新更改,此代码应该有效:

(function() {
  loadJS('somescript.js')
  loadJS('somescript2.js')

  // This is your code to execute once the scripts have loaded.
  console.log('Okay');
})();

现在你在loadJS中有document.body.appendChild,你不需要传递的元素。此外,您不需要使用回调,只需在2 loadJS次调用后调用您的代码(假设您已删除了async属性)。