You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular清理Script src URL后取值异常,动态加载脚本失败

问题解决:Angular动态加载脚本时SafeResourceUrl导致的错误提示

问题原因

你通过Renderer2.setProperty给动态创建的script元素设置src属性时,传入了Angular的SafeResourceUrl对象。由于Renderer2操作的是原生DOM,无法识别Angular的安全值包装类型,会将该对象的toString()结果(即提示文本)作为src值,从而生成错误的script标签。

解决方案

方案1:直接使用原始URL + setAttribute

动态创建的script元素不属于Angular模板绑定上下文,无需通过SafeResourceUrl处理,直接用原始URL结合Renderer2.setAttribute即可:

public loadScript(): void {
    const scriptele = this.renderer.createElement('script');
    this.renderer.setAttribute(scriptele, 'src', env.externalUrl);
    this.renderer.appendChild(document.head, scriptele);
}

方案2:提取SafeResourceUrl中的原始URL(不推荐但可行)

如果必须保留安全校验逻辑,可以提取SafeResourceUrl内部的原始URL字符串(注意:该属性为Angular内部标识,官方不推荐直接依赖,但在动态DOM操作场景下可临时使用):

private getUrl(): string {
    const safeUrl = this.sanitizer.bypassSecurityTrustResourceUrl(env.externalUrl);
    return (safeUrl as any).changingThisBreaksApplicationSecurity;
} 

public loadScript(): void {
    const scriptele = this.renderer.createElement('script');
    this.renderer.setProperty(scriptele, 'src', this.getUrl());
    this.renderer.appendChild(document.head, scriptele);
}

内容的提问来源于stack exchange,提问作者Aayushi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 21:26:05