下载里面的脚本 Angular 2 innerHTML binding
Download scripts inside Angular 2 innerHTML binding
我正在开发 Angular 2 应用程序,它在我的应用程序中显示新闻项目。新闻项保存在数据库中,并使用 Angular 的 [innerHTML] 绑定加载到模板中。
当新闻项内容中有嵌入内容(如推文)时会出现问题,这需要加载 javascript 文件(例如 //platform.twitter.com/widgets.js).问题是浏览器不会下载文件,即使在解析页面后也是如此。
有谁知道如何解决这个问题?
谢谢!
我想如果你有这样的东西,它会下载文件。
因此,当您获得新闻提要项目时,如果您有关于新闻提要项目的任何数据,当您可以确定它是否嵌入了推特时,您可以检查它,然后获取您需要的任何 js 文件。
loadedURLs = {
// to hold a cache so you wont download more than once.
};
this.service.fetchDataFromDB()
.subscribe(data =>{
if(data.url.indexOf('twitter') != -1 && loadedURLs[data.url] == undefined){
loadedURLs[fileURL] = fileURL;
// send the file name you want or need.
this.downloadJS(JSFileURL);
}
});
downloadJS(fileURL){
var script = document.createElement('script');
script.src = (fileURL);
document.head.appendChild(script);
}
对于有兴趣从包含 HTML:
的字符串中获取所有外部脚本的人
findExternalScriptsInHtmlString(string) {
var parser = new DOMParser();
var scripts = parser.parseFromString(string, 'text/html').getElementsByTagName('script');
var result = [];
for (var i = 0; i < scripts.length; i++) {
var src = scripts[i].getAttribute('src');
if (src.length && result.indexOf(src) === -1) result.push(src);
}
return result;
}
我正在开发 Angular 2 应用程序,它在我的应用程序中显示新闻项目。新闻项保存在数据库中,并使用 Angular 的 [innerHTML] 绑定加载到模板中。
当新闻项内容中有嵌入内容(如推文)时会出现问题,这需要加载 javascript 文件(例如 //platform.twitter.com/widgets.js).问题是浏览器不会下载文件,即使在解析页面后也是如此。
有谁知道如何解决这个问题? 谢谢!
我想如果你有这样的东西,它会下载文件。 因此,当您获得新闻提要项目时,如果您有关于新闻提要项目的任何数据,当您可以确定它是否嵌入了推特时,您可以检查它,然后获取您需要的任何 js 文件。
loadedURLs = {
// to hold a cache so you wont download more than once.
};
this.service.fetchDataFromDB()
.subscribe(data =>{
if(data.url.indexOf('twitter') != -1 && loadedURLs[data.url] == undefined){
loadedURLs[fileURL] = fileURL;
// send the file name you want or need.
this.downloadJS(JSFileURL);
}
});
downloadJS(fileURL){
var script = document.createElement('script');
script.src = (fileURL);
document.head.appendChild(script);
}
对于有兴趣从包含 HTML:
的字符串中获取所有外部脚本的人findExternalScriptsInHtmlString(string) {
var parser = new DOMParser();
var scripts = parser.parseFromString(string, 'text/html').getElementsByTagName('script');
var result = [];
for (var i = 0; i < scripts.length; i++) {
var src = scripts[i].getAttribute('src');
if (src.length && result.indexOf(src) === -1) result.push(src);
}
return result;
}