我有一个Angle 6应用程序,它将被嵌入另一个应用程序中。该应用程序将javascript注入浏览器,以便向angular应用程序公开某些功能。
例如,当我在提到的应用程序中运行我的角度应用程序时,如果我转到Web控制台,则可以执行以下js方法
API.callService("Special Service");
工作正常。
我该如何在角度应用程序中执行相同的操作?
我在组件中尝试了以下内容
declare var API: any;
然后使用ngAfterViewInit()方法
API.callService("Special Service");
但由于未定义API我收到错误消息。
作为其他信息,我可以将chrome dev工具用于嵌入式浏览器。如果我想运行javascript方法,我就这样做。
那很好!问题是要从Angular组件进行相同的调用。
谢谢!
答案 0 :(得分:1)
希望对您有帮助
declare var API: any;
您说的是API的任何值,因此您未定义;
尝试使用您的构造函数或ngAfterViewInit
this.API = API.callService("Special Service");
答案 1 :(得分:0)
您需要导出javascript函数,然后可以在angular模块中要求它们。
当然,您需要能够或有权修改原始javascript文件以添加模块导出声明。
要在角度组件中使用“ require”功能,您需要运行:
$ npm install @types/node
然后在tsconfig.json中的“ typeRoots”属性下,添加:
"types": ["node"],
这里是一个简单的示例:https://stackblitz.com/edit/angular-qphccu
答案 2 :(得分:0)
全部
我发现了问题
尽管我在ngAfterViewInit中调用api,但该api似乎不可用。
我尝试过
setTimeout(()=> this.click(),1000);
click(){
var result = SrwOSGiApi.callOSGIService("com.sabre.edge.platform.core.sso.base.IAgentProfileService","getPcc", null);
}
工作正常!
谢谢!