123456789101112131415161718192021222324252627282930313233343536 |
- //插入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;
|