0

我在 Angular 4 中遇到了脚本问题。让我解释一下:我正在构建一个 Angular 应用程序,该应用程序将包含在更大的 Web 应用程序中。所以我的应用程序只是这个更大的 Web 应用程序中的其他应用程序之一。在我的应用程序中,我需要包含一些代表此 Web 应用程序公共区域的 HTML 代码。它们将是应用程序的头部、页眉、菜单和页脚。我的应用程序将放置在剩余空间中。因此,我检索这些 HTML 代码,通过绕过清理将它们转换为SafeValue,并通过使用一些divs的 innerHTML 属性将它们包含在内。之后,我可以看到这些带有样式和所有内容的 HTML。

这就是上下文。问题是这些 HTML 中的脚本无法运行。即使它们没有被删除(您可以检查页面的 HTML 并查看那里的脚本),它们也不会运行。我需要它们运行,因为它们需要执行一些重要的任务,例如用链接填充菜单、动画菜单扩展以及天知道还有什么。

我已经尝试使用文档 DOM 对象将这些 HTML 包含在index.html中,以替换我放入index.html作为占位符的div,但我遇到了同样的问题:它呈现,但脚本不不要跑。有趣的是,如果我将未运行的脚本标记直接放在index.html中(硬编码,而不是动态),它就可以工作。

因此,脚本将具有以下形式:

<script type="text/javascript" src="//some_external_source"></script>

只有一句话:我无法控制我收到的这些常见 HTML。我只是收到它们,并且为了 Web 应用程序的视觉识别而不得不使用它们。

抱歉,如果已经回答。几天来我一直在寻找答案,但仍然没有找到答案(尽管我确实找到了与 AngularJS 类似的东西),所以我发布了。

4

1 回答 1

1

这不是 Angular 2 打算解决此类问题的方式,如果您想将您的应用程序分成不同的部分,例如:内容、页眉、页脚,您可能应该看看命名的路由器插座或 transcludion。

但是,如果您想按照自己的方式执行此操作,请执行以下操作:

@Component({.your metadata..})
export class SomeComponent{
constructor (private domSanitizer:DomSanitizer){
    this.domSanitizer.bypassSecurityTrustScript(yourScript);
}
}
于 2017-07-13T19:54:28.723 回答