//插入html代码
const html = {
document: false,
init: function(doc) {
this.document = doc.$refs.initHtml.$el;
},
insert: function(html) {
var self = this;
var div = document.createElement('div');
div.innerHTML = html;
this.document.appendChild(div);
var scripts = div.querySelectorAll('script');
return Array.prototype.slice.apply(scripts).reduce((chain, script) => {
return chain.then(() => self.runScript(script));
}, Promise.resolve());
},
//执行script代码
runScript: function(script) {
return new Promise((reslove, rejected) => {
const newScript = document.createElement('script');
newScript.innerHTML = script.innerHTML;
const src = script.getAttribute('src');
if (src) newScript.setAttribute('src', src);
// script 加载完成和错误处理
newScript.onload = () => reslove();
newScript.onerror = err => rejected();
document.head.appendChild(newScript);
document.head.removeChild(newScript);
if (!src) {
// 如果是 inline script 执行是同步的
reslove();
}
})
},
}
export default html;