scripts.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. /*
  2. * @Author: Rindy
  3. * @Date: 2021-04-26 14:18:55
  4. * @LastEditors: Rindy
  5. * @LastEditTime: 2021-09-13 12:28:00
  6. * @Description: 注释
  7. */
  8. var lastWindowErrorUrl
  9. var lastWindowError
  10. var baseOrigin = location.origin
  11. var currentScript = (document.currentScript || {}).src
  12. /**
  13. * 获取当前脚本路径
  14. */
  15. export var getScriptURL = (function () {
  16. if (!currentScript) {
  17. var a = {}
  18. try {
  19. a.b()
  20. } catch (e) {
  21. var stack = e.stack || e.sourceURL || e.stacktrace
  22. var match = /(?:http|https|file):\/\/.*?\/.+?.js/.exec(stack)
  23. if (match) {
  24. currentScript = match[0]
  25. }
  26. }
  27. }
  28. var filepathPart = currentScript.split('/')
  29. filepathPart.pop()
  30. currentScript = filepathPart.join('/') + '/'
  31. return function () {
  32. return currentScript
  33. }
  34. })()
  35. window.addEventListener('error', function (evt) {
  36. lastWindowErrorUrl = evt.filename
  37. lastWindowError = evt.error
  38. })
  39. function createScript(url) {
  40. var script = document.createElement('script')
  41. script.async = true
  42. // Only add cross origin for actual cross origin
  43. // this is because Safari triggers for all
  44. // - https://bugs.webkit.org/show_bug.cgi?id=171566
  45. if (url.indexOf(baseOrigin + '/')) {
  46. script.crossOrigin = 'anonymous'
  47. }
  48. script.src = url
  49. return script
  50. }
  51. export function loadScript(url, name, version) {
  52. return new Promise((resolve, reject) => {
  53. var script = createScript(url + (version ? `?v=${version}` : ''))
  54. script.addEventListener('error', function () {
  55. console.error('load:' + url + ' error')
  56. reject()
  57. })
  58. script.addEventListener('load', function () {
  59. document.head.removeChild(script)
  60. resolve(name)
  61. })
  62. document.head.appendChild(script)
  63. })
  64. }
  65. export function usePlugin(name, version) {
  66. return loadScript(getScriptURL() + 'plugins/' + name + '.js', name, version)
  67. }