我有问题。这是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生成
答案 0 :(得分:1)
你可以使用回调
function addScript( src,callback) {
var script = document.createElement( 'script' );
script.setAttribute( 'src', src );
script.onload=callback;
document.body.appendChild( s );
}