javascript - Angular 2 ajax加载并执行脚本标签

标签 javascript ajax angular typescript

我有一个问题。这是 AJAX 加载页面,以及该页面的脚本标记执行。

.then(response => {

            let restr: string = response;



            restr = restr.replace(/(<head[^>]*)(?:[^])*?\/head>/ig, '')
                .replace(/(<(\/?)body([^>]*?)>)/g, '')
                .replace(/(<style[^>]*)(?:[^])*?\/style>/g, '')
                .replace(/(<(\/?)html([^>]*?)>)/g, '')
                .replace(/(<app-root[^>]*)(?:[^])*?\/app-root>/ig, '')
                .replace(/(<\?[\s\S]*?\?>)|(<!DOCTYPE\s+\w+\s+\[[\s\S]*?\]>)|(<!\w[\s\S]*?>)/g, '')
                .replace(/href\s*=\s*(?:")/ig, 'href="/#')
                .replace(/href\s*=\s*(?:')/ig, "href='/#");



            let scripts = restr.match(/\<scr[\s\S]*?ipt>/g);


            this.srcfield.nativeElement.innerHTML = '';


            scripts.forEach(value => {
                var element = document.createElement('script');

                var valstr = value.match(/"([^"]+)*"/g)[0]
                    .replace(/"|'([^"]+)*"|'/g, '')
                    .replace(/text\/javascript/g, '');

                element.src = valstr;

                this.srcfield.nativeElement.appendChild(element);
            })

            this.response = restr;


        })

你怎么知道,response是服务器的应答,它只是文本提供的HTML页面。我在此页面上进行一些操作,并将其生成到当前用户页面,而无需重新加载。 但是有些标签script不会加载,因为它不按顺序执行。 我如何正确加载脚本标签

P.S 加载的页面是由YII2框架生成的

最佳答案

您可以使用回调

function addScript( src,callback) {
  var script = document.createElement( 'script' );
  script.setAttribute( 'src', src );
  script.onload=callback;
  document.body.appendChild( s );
}

关于javascript - Angular 2 ajax加载并执行脚本标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41696761/

相关文章:

angular - 如何在 Angular 5 中使用订阅进行单元测试?

javascript - 查询。检测输入类型 'date' 的变化

javascript - 正则表达式用值替换所有逗号

jquery - 发送数据后如何清空jqgrid网格?

Django >= 3.1 和 is_ajax

html - 鼠标悬停弄乱了表头,如何解决这个问题?

javascript - WordPress 4.1 javascript 停止工作

javascript - AngularJS 通过服务传递数据,但在页面刷新时丢失数据

javascript - ASP.NET Page_Load 与 AJAX 页面刷新代码重用/冗余?

angular - 带有 'lazy rendering' 的可扩展行表 - Angular Material