在另一个js中调用一个js文件的正确和最简单的方法

在定义特定对象后,我想在代码的body标签中调用第三方js。 什么是在我的js文件中添加第三方js的最佳方法? 我读到以下是一种方法,但这是有害的。

var myObject = { /*this is my object */}; var js = document.createElement("script"); js.type = "text/javascript"; js.src = "thirdparty.js"; document.body.appendChild(js); 

我是新手。 我研究了一些看见的选项,如reuire js等,但我不是很清楚。 任何人都可以建议我在我的js文件中包含第三方js的正确和最简单的方法吗? 这样做的方法? 我想在我在体内定义myObject之后才调用这个js。 \

像这样:@veritas

 myObject = { //my object }; add_html += ' 
'; add_html += '
'; $some_div.find('li').eq(2).after( add_html ); $('#xyz').append(myObject); var js = document.createElement("script"); js.type = "text/javascript"; js.src = "thirdparty.js"; document.body.appendChild(js);

如果要使用JS插入第三方库,可以添加事件侦听器以确保它已加载,然后运行代码。

 var myObject = { /*this is my object */}, js = document.createElement("script"); js.type = "text/javascript"; js.onload = function () { myObject.callMethod(); } document.body.appendChild(js); js.src = "thirdparty.js"; 

最重要的部分是在附加侦听器之后放置js.src =设置,因为资源可能会在您管理向其添加事件侦听器之前触发load

编辑

我不清楚这部分是做什么的js.onload = function(){myObject.callMethod(); 什么是callMethod()? 。

.onload部分

script之后的每个资源元素都会在成功加载文档中的内容后触发事件load.onload部分正在为该特定事件添加一个事件监听器(注意:此代码也可以用不同的方式编写,例如js.addEventListener("load", callback) )。 为什么我们要在load后触发代码? 很简单,因为浏览器正在异步执行获取和执行,并且您希望从thirdparty.js获取的对象或方法可能在脚本中的下一个操作之前没有准备好(因此您将获得undefined值)。

.callMethod()部分

这只是我的虚拟代码,我假设你想从myObject运行一个使用一些thirdlibrary对象和方法的方法。

为什么大惊小怪呢? 简单

  

最好的方法是在HTML文件的头部包含第三方库,其中包含您自己的js,确保它在您之前:

   

一种更简单的方法是使用ScriptManJS库来完成它。 它确保正确加载依赖项,并且在使用ScriptManJS时不必担心它。

1)将脚本标记添加到html的head部分以包含库:

  

2)在代码开头的某处添加:

 new ScriptMan(); 

3)以一种可能的语法执行包含。 我将提供几个选项,如何做到更广泛的图片。 我相信你会选择最适合你需求的那款:

选项1:

只需包含两个文件 – 加载时不需要额外的代码。

 S.require( [ 'file_with_your_object.js', 'third_party.js' ], { sync: true } ); // Files may not be loaded yet when executing code here 

选项2:

如果在主文件中定义了对象,则它变得简单。

 var yourObject = { /* Object contents */ }; S.require( 'third_party.js' ); // Files may not be loaded yet when executing code here 

如果您不喜欢在此片段下方尚未加载文件的事实,请将最后一行修改为:

 S.require( 'third_party.js' ).then( function() { // Here third_party.js will definitely be loaded } ); // Here third.party.js may not be ready yet 

选项3

与选项1相同 – 语法不同。

 S.require( 'file_with_your_object.js' ).then( function() { S.require( 'third_party.js' ); } ); 

选项4:

我将如何用ScriptManJS做到这一点。

file_with_your_object.js

 return { /* Object contents */ }; 

主文件(即index.html)

 S.require( 'file_with_your_object.js' ).then( function( yourObject ) { S.require( 'third_party.js' ).then( function() { // Everything is loaded and yourObject contains your object here } ); } ); 

或者甚至像这样(在主文件中):

 S.require( [ 'file_with_your_object.js', 'third_party.js' ], { sync: true } ).then( function( yourObject ) { // Everything is loaded and yourObject contains your object here } ); 

如果由于某种原因第三方库不喜欢被包含(低概率),你可以在同步旁边添加一个选项:… {sync:true,nakedFiles:[‘third_party.js’]} .. 。

希望这可以帮助 :)