html.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. //插入html代码
  2. const html = {
  3. document: false,
  4. init: function(doc) {
  5. this.document = doc.$refs.initHtml.$el;
  6. },
  7. insert: function(html) {
  8. var self = this;
  9. var div = document.createElement('div');
  10. div.innerHTML = html;
  11. this.document.appendChild(div);
  12. var scripts = div.querySelectorAll('script');
  13. return Array.prototype.slice.apply(scripts).reduce((chain, script) => {
  14. return chain.then(() => self.runScript(script));
  15. }, Promise.resolve());
  16. },
  17. //执行script代码
  18. runScript: function(script) {
  19. return new Promise((reslove, rejected) => {
  20. const newScript = document.createElement('script');
  21. newScript.innerHTML = script.innerHTML;
  22. const src = script.getAttribute('src');
  23. if (src) newScript.setAttribute('src', src);
  24. // script 加载完成和错误处理
  25. newScript.onload = () => reslove();
  26. newScript.onerror = err => rejected();
  27. document.head.appendChild(newScript);
  28. document.head.removeChild(newScript);
  29. if (!src) {
  30. // 如果是 inline script 执行是同步的
  31. reslove();
  32. }
  33. })
  34. },
  35. }
  36. export default html;