加载的脚本不会出现在全局上下文中

问题描述 投票:0回答:1

我试图在我的一个模型中加载脚本:

attached(){
$.ajax({
  type: 'GET',
  url: '/lib/zxcvbn/dist/zxcvbn.js',
  dataType: 'script',
  cache: true
}).done(function(script, textStatus) {
  console.log('loaded script');
});

}

done回调被击中但是出口zxcvbn在全球范围内不可用。

在普通的html页面(即不是aurelia)中运行的完全相同的代码工作正常(zxcvbn在全局上下文中可用)

我知道这不是在aurelia中加载外部JS文件的推荐方法,但是脚本非常大,只在我的应用程序中的一个位置需要。 zxcvbn州的文件:

zxcvbn检测并支持CommonJS(node,browserify)和AMD(RequireJS)。如果没有这些,它会向全局命名空间添加单个函数zxcvbn()。

我的aurelia应用程序正在使用RequireJS;如果它没有加载到全局命名空间,它在哪里加载,我该如何引用它?

requirejs aurelia
1个回答
1
投票

根据您提供的信息,zxcvbn检测到存在AMD加载程序(RequireJS)并调用define将自己注册为AMD模块。

由于页面上已经有RequireJS,因此可以通过调用require替换jQuery调用,并传递完整路径:

require(['/lib/zxcvbn/dist/zxcvbn.js'], function (zxcvbn) {
  // Do something with zxcvbn ...
});

由于脚本将自身注册为AMD模块,因此参数zxcvbn将保存模块的值。

请注意,当您传递以正斜杠开头的路径时,RequireJS将按原样使用路径:这会绕过您的RequireJS配置(例如,baseUrlpathsmap未应用等),并且RequireJS不会添加.js扩展名,所以它需要有扩展名。

© www.soinside.com 2019 - 2024. All rights reserved.