我有一个问题。这是 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/