I have load the HTML
page by http.get()
method, and i add content this page to div tag.
getRequestToAssignPage (param: string) : any {
return this.$http.get(param)
.map((res: Response) => {
this.status = res;
return res.text();
})
.toPromise()
.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(/(<?[sS]*??>)|(<!DOCTYPEs+w+s+[[sS]*?]>)|(<!w[sS]*?>)/g, '')
.replace(/(hrefs*=s*(?:))/ig, 'href=/#')
.replace(/(hrefs*=s*(?:'))/ig, href='/#);
this.response = restr;
})
.catch(error => this.status = error );
}
How you do you see, this method, put response in variable, and parse string by regular expressions
Ok, and next I add it to div, like this
<div [innerHTML]=response | safe></div>
Good, my page is display. But, scripts doesn't work. They are exist in the div tag, but doesn't execute.
I had tried do that with eval()
but this finished by poorly
let scripts: string[] = restr.match(/<scr[sS]*?ipt>/g);
this.srcfield.nativeElement.innerHTML = '';
scripts.forEach((value, index) => {
eval.call(null, (this.srcfield.nativeElement.innerHTML = value));
});
SyntaxError: Unexpected token <
Why innerHTML
doesn't execute loaded script tags? How i can fix that?