我已經通過http.get()
方法加載HTML
頁面,並且我將此頁面的內容添加到div標記。Angular 2如何從innerHTML執行腳本標記
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(/(<\?[\s\S]*?\?>)|(<!DOCTYPE\s+\w+\s+\[[\s\S]*?\]>)|(<!\w[\s\S]*?>)/g, '')
.replace(/(href\s*=\s*(?:"))/ig, 'href="/#')
.replace(/(href\s*=\s*(?:'))/ig, "href='/#");
this.response = restr;
})
.catch(error => this.status = error);
}
你怎麼樣,你看,這個方法,把變量響應,並解析正則表達式 好的字符串,接下來我將它添加到div的,這樣
<div [innerHTML]="response | safe"></div>
好,我顯示頁面。但是,腳本不起作用。它們存在於div標籤中,但不會執行。
我曾試圖做到這一點與eval()
但這種不良完
let scripts: string[] = restr.match(/\<scr[\s\S]*?ipt>/g);
this.srcfield.nativeElement.innerHTML = '';
scripts.forEach((value, index) => {
eval.call(null, (this.srcfield.nativeElement.innerHTML = value));
});
SyntaxError: Unexpected token <
爲什麼innerHTML
不執行加載腳本標籤?我該如何解決這個問題?