如何让systemjs从全局格式的CDN加载模块?

时间:2016-05-03 16:12:22

标签: javascript typescript angular chromecast systemjs

我得到的错误是: EXCEPTION:ReferenceError:未在[null]

中定义强制转换

编写自定义Chromecast接收器应用程序需要使用以下js文件,该文件通过全局' 强制转换'来展示功能。变量:

// www.gstatic.com/cast/sdk/libs/receiver/2.0.0/cast_receiver.js

我想使用systemjs将此脚本作为模块加载,而不是在index.html中使用脚本标记。

这是一个Angular2和TypeScript应用程序,因此在某些服务MyService中,我希望能够导入' cast'并使用它。

的index.html

    <script>
      System.config({
        packages: {
          app: {
            format: 'register',
            defaultExtension: 'js'
          }
        },
        paths: {
          'cast': '//www.gstatic.com/cast/sdk/libs/receiver/2.0.0/cast_receiver.js'
        },
        meta: {
          '//www.gstatic.com/cast/sdk/libs/receiver/2.0.0/cast_receiver.js': {format: 'global'}
        },      
});

      System.import('app/main')
            .then(null, console.error.bind(console));
    </script>

myService.ts

import {Injectable} from 'angular2/core';
import cast from 'cast';

@Injectable()
export class MyService {
  public init = () => {
    cast.receiver.logger.setLevelValue(cast.receiver.LoggerLevel.NONE);
  }
  ...
}

可以从以下位置克隆示例Angular2 + TypeScript + Chromecast Receiver应用程序:

https://github.com/rmtuckerphx/angular2-chromecast-receiver-starterkit

此代码目前没有任何代码可以加载&#39;施放&#39;使用systemjs但可以通过更新index.html和cast-receiver-manager.service.ts来快速修改

1 个答案:

答案 0 :(得分:0)

尝试添加

   map: {
     cast-receiver: '//www.gstatic.com/cast/sdk/libs/receiver/2.0.0/cast_receiver.js'
}

到您的系统配置,然后通过,

声明要从服务中的脚本导入的内容
declare var cast;

这将允许您的编译器识别您要导入的东西的名称。