【问题标题】:Not able to execute PayPal Banner Script in Angular 4无法在 Angular 4 中执行 PayPal 横幅脚本
【发布时间】:2018-05-24 14:13:29
【问题描述】:

我正在尝试将 PayPal 横幅集成到我的 Angular 4 应用程序中。 我有这个下面的脚本。

<script type="text/javascript" data-pp-payerid="XXXXXXXXXX" data-pp-placementtype="728x90" data-pp-style="BLUWHTYLRG">
    (function (d, t) {
        "use strict";
        var s = d.getElementsByTagName(t)[0], n = d.createElement(t);
      n.src="//www.paypalobjects.com/upstream/bizcomponents/js/merchant.js";
        s.parentNode.insertBefore(n, s);
    }(document, "script"));
</script>

如果仅放置在 body 标记中,此代码运行良好,但从任何组件中它都不起作用,因为 Angular 正在从模板正文中删除 script 标记。请帮忙

【问题讨论】:

    标签: angular paypal banner


    【解决方案1】:

    我不确定您为什么不能在组件中使用 &lt;script&gt;,但这很可能是出于安全或 AoT 的原因。无论哪种方式,这对于 Angular 组件都是一种不好的做法。

    我没有真正的解决方案,但这是我会尝试的。

    在组件的模板中添加一个元素来保存属性数据,并给它一个#target 引用。

    <span #target data-pp-payerid="XXXXXXXXXX" data-pp-placementtype="728x90" data-pp-style="BLUWHTYLRG">
    

    您现在可以通过 @ViewChild 属性访问该 DOM 元素。

    @ViewChild('target')
    public target: ElementRef;
    

    现在您只需插入一个&lt;script&gt; 元素即可加载merchant.js

    public OnInit() {
        const n = document.createElement('script');
        n.src="//www.paypalobjects.com/upstream/bizcomponents/js/merchant.js";
        this.target.nativeElement.appendChild(n);
    }
    

    我不确定这是否可行。我不明白merchant.js 如何从 DOM 中的父节点读取属性。加载脚本时,它没有对加载它的原始 &lt;script&gt; 标记的引用。

    编辑:

    此答案可以更新为使用 Document 可注入和 Render2 服务,以便支持服务器端呈现。

    【讨论】:

    • 我正面临这个错误this.target.appendChild is not a function
    • @ParnabSanyal 尝试使用this.target.nativeElement.appendChild
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    • 2011-07-25
    • 2016-03-29
    • 1970-01-01
    • 2017-09-15
    相关资源
    最近更新 更多