我引用[https://github.com/olark/lightningjs]将js加载到单独的窗口名称空间中。

我已经测试了一个名为sample.js的脚本文件,如下所示,需要将其加载到单独的窗口名称空间中。

function testjs(){
console.log("sample");

}


我在HTML中包含lightningjs-embed.js和lightining-bootstrap.js。

<html>
<head>
<title>testing light js</title>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/lightningjs-master/lightningjs-embed.js" ></script>
<script type="text/javascript" src="js/lightningjs-master/lightningjs-bootstrap.js"></script>

<script type="text/javascript">/*{literal}<![CDATA[*/
/*** lightningjs-embed.min.js ***/
window.piratelib = lightningjs.require("piratelib","js/sample.js");
/*]]>{/literal}*/</script>

console.log("modules",lightningjs.modules);
piratelib("testjs");


在控制台中,我可以查看两个对象,一个为lightningjs,另一个为piratelib。我期望在调用piratelib(“ testjs”)之后在控制台中获得“样本”。但是我没有在控制台中得到样本。如果在控制台中尝试piratelib(“ testjs”),则会显示

function promiseFunction() {
                    console.log("promisdeId",promiseResponseId);
                    promiseFunction.id = promiseResponseId;
                    return modules[namespace].apply(promiseFunction, arguments)
                }


而不是sample.js中的实际功能

function testjs(){
console.log("sample");

}


建议我一些想法,以在单独的window.namespace下加载js,以避免js冲突。请澄清我是否使用lightningjs以正确的方式调用函数。
提前致谢。

最佳答案

LightningJS处理的函数返回promises,因此:

piratelib("testjs").then(function(result) {
  console.log(result);
}, function(error) {
  // Handle your error
});

09-17 10:36