Angular 2 ajax加载,并执行脚本标记

时间:2017-01-17 12:09:41

标签: 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不会load,因为它不按顺序执行。 我如何load script标记正确

P.S加载的页面由YII2 Framework生成

1 个答案:

答案 0 :(得分:1)

你可以使用回调

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