@alicloud/console-os-browser-vm 1.4.21-alpha.0 → 1.4.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/Context.js +31 -53
- package/es/Document.js +8 -40
- package/es/Elements.js +8 -18
- package/es/History.js +2 -11
- package/es/Location.js +0 -9
- package/es/Window.js +1 -19
- package/es/events.js +0 -6
- package/es/index.js +37 -54
- package/es/utils/HTMLScriptElement.js +4 -7
- package/es/utils/injectScriptCallBack.js +0 -8
- package/lib/Context.js +36 -62
- package/lib/Document.js +13 -41
- package/lib/Elements.js +8 -24
- package/lib/History.js +2 -13
- package/lib/Location.js +0 -10
- package/lib/Window.js +2 -21
- package/lib/events.js +0 -14
- package/lib/index.js +42 -65
- package/lib/utils/HTMLScriptElement.js +4 -15
- package/lib/utils/common.js +0 -2
- package/lib/utils/credentials.js +0 -2
- package/lib/utils/injectScriptCallBack.js +0 -10
- package/lib/utils/isSSR.js +0 -2
- package/lib/utils/not-implemented.js +0 -2
- package/package.json +2 -2
- package/dist/index.js +0 -1
package/es/index.js
CHANGED
|
@@ -1,43 +1,35 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
2
|
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
|
3
|
-
|
|
4
3
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
5
|
-
|
|
6
4
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
7
|
-
|
|
8
5
|
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
9
|
-
|
|
10
6
|
/**
|
|
11
7
|
* index.js
|
|
12
8
|
* @lastModified 2019085
|
|
13
9
|
* @forwardCompatibleTo 2019085
|
|
14
10
|
* @createAt 2019085
|
|
15
11
|
*/
|
|
12
|
+
|
|
16
13
|
import './Elements';
|
|
17
14
|
import Context from './Context';
|
|
18
15
|
export var createContext = /*#__PURE__*/function () {
|
|
19
16
|
var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
20
17
|
var conf,
|
|
21
|
-
|
|
18
|
+
_args = arguments;
|
|
22
19
|
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
23
|
-
while (1) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
case 4:
|
|
34
|
-
case "end":
|
|
35
|
-
return _context.stop();
|
|
36
|
-
}
|
|
20
|
+
while (1) switch (_context.prev = _context.next) {
|
|
21
|
+
case 0:
|
|
22
|
+
conf = _args.length > 0 && _args[0] !== undefined ? _args[0] : {};
|
|
23
|
+
_context.next = 3;
|
|
24
|
+
return Context.create(conf);
|
|
25
|
+
case 3:
|
|
26
|
+
return _context.abrupt("return", _context.sent);
|
|
27
|
+
case 4:
|
|
28
|
+
case "end":
|
|
29
|
+
return _context.stop();
|
|
37
30
|
}
|
|
38
31
|
}, _callee);
|
|
39
32
|
}));
|
|
40
|
-
|
|
41
33
|
return function createContext() {
|
|
42
34
|
return _ref.apply(this, arguments);
|
|
43
35
|
};
|
|
@@ -45,23 +37,18 @@ export var createContext = /*#__PURE__*/function () {
|
|
|
45
37
|
export var removeContext = /*#__PURE__*/function () {
|
|
46
38
|
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(context) {
|
|
47
39
|
return _regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
48
|
-
while (1) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
case 3:
|
|
58
|
-
case "end":
|
|
59
|
-
return _context2.stop();
|
|
60
|
-
}
|
|
40
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
41
|
+
case 0:
|
|
42
|
+
_context2.next = 2;
|
|
43
|
+
return Context.remove(context);
|
|
44
|
+
case 2:
|
|
45
|
+
return _context2.abrupt("return", _context2.sent);
|
|
46
|
+
case 3:
|
|
47
|
+
case "end":
|
|
48
|
+
return _context2.stop();
|
|
61
49
|
}
|
|
62
50
|
}, _callee2);
|
|
63
51
|
}));
|
|
64
|
-
|
|
65
52
|
return function removeContext(_x) {
|
|
66
53
|
return _ref2.apply(this, arguments);
|
|
67
54
|
};
|
|
@@ -69,30 +56,26 @@ export var removeContext = /*#__PURE__*/function () {
|
|
|
69
56
|
export var evalScripts = /*#__PURE__*/function () {
|
|
70
57
|
var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(code) {
|
|
71
58
|
var conf,
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
59
|
+
ctx,
|
|
60
|
+
resolver,
|
|
61
|
+
_args3 = arguments;
|
|
75
62
|
return _regeneratorRuntime.wrap(function _callee3$(_context3) {
|
|
76
|
-
while (1) {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
case "end":
|
|
90
|
-
return _context3.stop();
|
|
91
|
-
}
|
|
63
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
64
|
+
case 0:
|
|
65
|
+
conf = _args3.length > 1 && _args3[1] !== undefined ? _args3[1] : {};
|
|
66
|
+
_context3.next = 3;
|
|
67
|
+
return Context.create(conf);
|
|
68
|
+
case 3:
|
|
69
|
+
ctx = _context3.sent;
|
|
70
|
+
// eslint-disable-next-line no-new-func
|
|
71
|
+
resolver = new Function("\n return function({window, location, history, document}){ \n with(window.__CONSOLE_OS_GLOBAL_VARS_) { \n ".concat(code, "\n }\n }//@sourceURL=").concat(conf.name));
|
|
72
|
+
return _context3.abrupt("return", resolver(_objectSpread({}, ctx)));
|
|
73
|
+
case 6:
|
|
74
|
+
case "end":
|
|
75
|
+
return _context3.stop();
|
|
92
76
|
}
|
|
93
77
|
}, _callee3);
|
|
94
78
|
}));
|
|
95
|
-
|
|
96
79
|
return function evalScripts(_x2) {
|
|
97
80
|
return _ref3.apply(this, arguments);
|
|
98
81
|
};
|
|
@@ -2,20 +2,16 @@ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
|
2
2
|
export var addEventListener = function addEventListener(el, originEvent) {
|
|
3
3
|
return function (type, listener, options) {
|
|
4
4
|
var listeners = el._listenerMap.get(type) || [];
|
|
5
|
-
|
|
6
5
|
el._listenerMap.set(type, [].concat(_toConsumableArray(listeners), [listener]));
|
|
7
|
-
|
|
8
6
|
return originEvent.apply(el, [type, listener, options]);
|
|
9
7
|
};
|
|
10
8
|
};
|
|
11
9
|
export var removeEventListener = function removeEventListener(el, originEvent) {
|
|
12
10
|
return function (type, listener, options) {
|
|
13
11
|
var storedTypeListeners = el._listenerMap.get(type);
|
|
14
|
-
|
|
15
12
|
if (storedTypeListeners && storedTypeListeners.length && storedTypeListeners.indexOf(listener) !== -1) {
|
|
16
13
|
storedTypeListeners.splice(storedTypeListeners.indexOf(listener), 1);
|
|
17
14
|
}
|
|
18
|
-
|
|
19
15
|
return originEvent.apply(el, [type, listener, options]);
|
|
20
16
|
};
|
|
21
17
|
};
|
|
@@ -23,8 +19,9 @@ var elProperties = ['innerHTML', 'text', 'innerText'];
|
|
|
23
19
|
export var injectHTMLScriptElement = function injectHTMLScriptElement(el) {
|
|
24
20
|
el._listenerMap = new Map();
|
|
25
21
|
el.addEventListener = addEventListener(el, el.addEventListener);
|
|
26
|
-
el.removeEventListener = removeEventListener(el, el.removeEventListener);
|
|
22
|
+
el.removeEventListener = removeEventListener(el, el.removeEventListener);
|
|
27
23
|
|
|
24
|
+
// do not redefine property in sandbox
|
|
28
25
|
if (!el._evalScriptInSandbox) {
|
|
29
26
|
elProperties.forEach(function (property) {
|
|
30
27
|
Object.defineProperty(el, property, {
|
|
@@ -32,8 +29,8 @@ export var injectHTMLScriptElement = function injectHTMLScriptElement(el) {
|
|
|
32
29
|
return this.scriptText || '';
|
|
33
30
|
},
|
|
34
31
|
set: function set(value) {
|
|
35
|
-
this.scriptText = value;
|
|
36
|
-
|
|
32
|
+
this.scriptText = value;
|
|
33
|
+
// 如果是已经插入到 dom 树里面,则直接执行
|
|
37
34
|
if (el.parentNode) {
|
|
38
35
|
this.ownerContext.evalScript && el.ownerContext.evalScript(value.toString());
|
|
39
36
|
}
|
|
@@ -1,30 +1,23 @@
|
|
|
1
1
|
export var getJsonCallback = function getJsonCallback(src) {
|
|
2
2
|
var u;
|
|
3
|
-
|
|
4
3
|
try {
|
|
5
4
|
u = new URL(src);
|
|
6
5
|
} catch (error) {
|
|
7
6
|
return;
|
|
8
7
|
}
|
|
9
|
-
|
|
10
8
|
var sp = u.searchParams;
|
|
11
|
-
|
|
12
9
|
if (!sp) {
|
|
13
10
|
return null;
|
|
14
11
|
}
|
|
15
|
-
|
|
16
12
|
return sp.get('callback') || sp.get('cb');
|
|
17
13
|
};
|
|
18
|
-
|
|
19
14
|
var injectScriptCallBack = function injectScriptCallBack(scriptEl) {
|
|
20
15
|
setTimeout(function () {
|
|
21
16
|
if (!scriptEl.src) {
|
|
22
17
|
return;
|
|
23
18
|
}
|
|
24
|
-
|
|
25
19
|
var appWindow = scriptEl.ownerContext.window;
|
|
26
20
|
var callbackName = getJsonCallback(scriptEl.src);
|
|
27
|
-
|
|
28
21
|
if (callbackName && typeof appWindow[callbackName] === 'function') {
|
|
29
22
|
window[callbackName] = function () {
|
|
30
23
|
var result = appWindow[callbackName].apply(appWindow, arguments);
|
|
@@ -34,5 +27,4 @@ var injectScriptCallBack = function injectScriptCallBack(scriptEl) {
|
|
|
34
27
|
}
|
|
35
28
|
}, 0);
|
|
36
29
|
};
|
|
37
|
-
|
|
38
30
|
export default injectScriptCallBack;
|
package/lib/Context.js
CHANGED
|
@@ -1,36 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.default = void 0;
|
|
9
|
-
|
|
10
8
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
11
|
-
|
|
12
9
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
13
|
-
|
|
14
10
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
15
|
-
|
|
16
11
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
17
|
-
|
|
18
12
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
19
|
-
|
|
20
13
|
var _Window = _interopRequireDefault(require("./Window"));
|
|
21
|
-
|
|
22
14
|
var _Document = _interopRequireDefault(require("./Document"));
|
|
23
|
-
|
|
24
15
|
var _Location = _interopRequireDefault(require("./Location"));
|
|
25
|
-
|
|
26
16
|
var _History = _interopRequireDefault(require("./History"));
|
|
27
|
-
|
|
28
17
|
var _credentials = require("./utils/credentials");
|
|
29
|
-
|
|
30
18
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
19
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } /**
|
|
20
|
+
* Context
|
|
21
|
+
* @lastModified 2019086
|
|
22
|
+
* @forwardCompatibleTo 2019086
|
|
23
|
+
* @createAt 2019086
|
|
24
|
+
*/
|
|
34
25
|
var Context = /*#__PURE__*/function () {
|
|
35
26
|
function Context(conf, frame) {
|
|
36
27
|
(0, _classCallCheck2.default)(this, Context);
|
|
@@ -39,14 +30,12 @@ var Context = /*#__PURE__*/function () {
|
|
|
39
30
|
this.window = new _Window.default(conf, this, frame, location);
|
|
40
31
|
this.allowResources = conf.allowResources || [];
|
|
41
32
|
var body = conf.body;
|
|
42
|
-
|
|
43
33
|
if (conf.disableBody) {
|
|
44
34
|
body = document.body;
|
|
45
35
|
} else if (!conf.body) {
|
|
46
36
|
body = document.createElement('body');
|
|
47
37
|
document.documentElement.appendChild(body);
|
|
48
38
|
}
|
|
49
|
-
|
|
50
39
|
this.body = body;
|
|
51
40
|
this.document = new _Document.default(_objectSpread({
|
|
52
41
|
enableScriptEscape: true
|
|
@@ -55,42 +44,34 @@ var Context = /*#__PURE__*/function () {
|
|
|
55
44
|
this._listenerMap = new Map();
|
|
56
45
|
this.window.__IS_CONSOLE_OS_CONTEXT__ = true;
|
|
57
46
|
}
|
|
58
|
-
|
|
59
47
|
(0, _createClass2.default)(Context, [{
|
|
60
48
|
key: "loadScripts",
|
|
61
49
|
value: function () {
|
|
62
50
|
var _loadScripts = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(url) {
|
|
63
51
|
var resp, code;
|
|
64
52
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
65
|
-
while (1) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
case 7:
|
|
83
|
-
case "end":
|
|
84
|
-
return _context.stop();
|
|
85
|
-
}
|
|
53
|
+
while (1) switch (_context.prev = _context.next) {
|
|
54
|
+
case 0:
|
|
55
|
+
_context.next = 2;
|
|
56
|
+
return fetch(url, {
|
|
57
|
+
credentials: (0, _credentials.getFetchCredentials)(url)
|
|
58
|
+
});
|
|
59
|
+
case 2:
|
|
60
|
+
resp = _context.sent;
|
|
61
|
+
_context.next = 5;
|
|
62
|
+
return resp.text();
|
|
63
|
+
case 5:
|
|
64
|
+
code = _context.sent;
|
|
65
|
+
this.evalScript(code, url);
|
|
66
|
+
case 7:
|
|
67
|
+
case "end":
|
|
68
|
+
return _context.stop();
|
|
86
69
|
}
|
|
87
70
|
}, _callee, this);
|
|
88
71
|
}));
|
|
89
|
-
|
|
90
72
|
function loadScripts(_x) {
|
|
91
73
|
return _loadScripts.apply(this, arguments);
|
|
92
74
|
}
|
|
93
|
-
|
|
94
75
|
return loadScripts;
|
|
95
76
|
}()
|
|
96
77
|
}, {
|
|
@@ -111,7 +92,6 @@ var Context = /*#__PURE__*/function () {
|
|
|
111
92
|
key: "remove",
|
|
112
93
|
value: function remove() {
|
|
113
94
|
this.document.removeEventListeners();
|
|
114
|
-
|
|
115
95
|
if (this.baseFrame) {
|
|
116
96
|
if (this.baseFrame.parentNode) {
|
|
117
97
|
this.baseFrame.parentNode.removeChild(this.baseFrame);
|
|
@@ -124,23 +104,23 @@ var Context = /*#__PURE__*/function () {
|
|
|
124
104
|
key: "create",
|
|
125
105
|
value: function create(conf) {
|
|
126
106
|
var _this = this;
|
|
127
|
-
|
|
128
107
|
return new Promise(function (resolve) {
|
|
129
108
|
var _document$documentEle;
|
|
109
|
+
var iframe = document.createElement('iframe');
|
|
130
110
|
|
|
131
|
-
|
|
132
|
-
|
|
111
|
+
// TODO: change src to a reasonable value.
|
|
133
112
|
iframe.setAttribute('src', conf.url ? conf.url : '/api.json');
|
|
134
113
|
iframe.style.cssText = 'position: absolute; top: -20000px; width: 1px; height: 1px;';
|
|
135
|
-
if (conf.id) iframe.setAttribute('data-id', conf.id);
|
|
114
|
+
if (conf.id) iframe.setAttribute('data-id', conf.id);
|
|
136
115
|
|
|
116
|
+
// body will be hijacked in sandbox, so get body from html
|
|
137
117
|
var topBody = ((_document$documentEle = document.documentElement) === null || _document$documentEle === void 0 ? void 0 : _document$documentEle.getElementsByTagName('body')[0]) || document.body;
|
|
138
|
-
topBody.appendChild(iframe);
|
|
118
|
+
topBody.appendChild(iframe);
|
|
139
119
|
|
|
120
|
+
// the onload will no trigger when src is about:blank
|
|
140
121
|
if (conf.url === 'about:blank') {
|
|
141
122
|
return resolve(new _this(conf, iframe));
|
|
142
123
|
}
|
|
143
|
-
|
|
144
124
|
iframe.onload = function () {
|
|
145
125
|
resolve(new _this(conf, iframe));
|
|
146
126
|
};
|
|
@@ -151,30 +131,24 @@ var Context = /*#__PURE__*/function () {
|
|
|
151
131
|
value: function () {
|
|
152
132
|
var _remove = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(context) {
|
|
153
133
|
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
154
|
-
while (1) {
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
case "end":
|
|
163
|
-
return _context2.stop();
|
|
164
|
-
}
|
|
134
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
135
|
+
case 0:
|
|
136
|
+
if (context.remove) {
|
|
137
|
+
context.remove();
|
|
138
|
+
}
|
|
139
|
+
case 1:
|
|
140
|
+
case "end":
|
|
141
|
+
return _context2.stop();
|
|
165
142
|
}
|
|
166
143
|
}, _callee2);
|
|
167
144
|
}));
|
|
168
|
-
|
|
169
145
|
function remove(_x2) {
|
|
170
146
|
return _remove.apply(this, arguments);
|
|
171
147
|
}
|
|
172
|
-
|
|
173
148
|
return remove;
|
|
174
149
|
}()
|
|
175
150
|
}]);
|
|
176
151
|
return Context;
|
|
177
152
|
}();
|
|
178
|
-
|
|
179
153
|
var _default = Context;
|
|
180
154
|
exports.default = _default;
|
package/lib/Document.js
CHANGED
|
@@ -1,26 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.default = void 0;
|
|
9
|
-
|
|
10
8
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
11
|
-
|
|
12
9
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
|
-
|
|
14
10
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
15
|
-
|
|
16
11
|
var _HTMLScriptElement = require("./utils/HTMLScriptElement");
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
12
|
+
/**
|
|
13
|
+
* Document.js
|
|
14
|
+
* @lastModified 2019085
|
|
15
|
+
* @forwardCompatibleTo 2019085
|
|
16
|
+
* @createAt 2019085
|
|
17
|
+
*/
|
|
24
18
|
var Document = /*#__PURE__*/(0, _createClass2.default)(function Document() {
|
|
25
19
|
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
26
20
|
var context = arguments.length > 1 ? arguments[1] : undefined;
|
|
@@ -33,75 +27,53 @@ var Document = /*#__PURE__*/(0, _createClass2.default)(function Document() {
|
|
|
33
27
|
case 'cookie':
|
|
34
28
|
document.cookie = value;
|
|
35
29
|
break;
|
|
36
|
-
|
|
37
30
|
default:
|
|
38
31
|
target[name] = value;
|
|
39
32
|
}
|
|
40
|
-
|
|
41
33
|
return true;
|
|
42
34
|
},
|
|
43
35
|
get: function get(target, name) {
|
|
44
36
|
switch (name) {
|
|
45
37
|
case 'body':
|
|
46
38
|
return context.body;
|
|
47
|
-
|
|
48
39
|
case 'location':
|
|
49
40
|
return context.location;
|
|
50
|
-
|
|
51
41
|
case 'defaultView':
|
|
52
42
|
return context.window;
|
|
53
|
-
|
|
54
43
|
case 'write':
|
|
55
44
|
case 'writeln':
|
|
56
45
|
return function () {};
|
|
57
|
-
|
|
58
46
|
case 'createElement':
|
|
59
47
|
return function () {
|
|
60
48
|
var _document;
|
|
61
|
-
|
|
62
49
|
var el = (_document = document).createElement.apply(_document, arguments);
|
|
63
|
-
|
|
64
50
|
el.ownerContext = context;
|
|
65
|
-
el.appId = options.id;
|
|
66
|
-
|
|
51
|
+
el.appId = options.id;
|
|
52
|
+
// 对于 script 标签如果开启防逃逸,就直接 hack script 标签
|
|
67
53
|
if (el.tagName === 'SCRIPT' && !options.enableScriptEscape) {
|
|
68
54
|
(0, _HTMLScriptElement.injectHTMLScriptElement)(el);
|
|
69
55
|
}
|
|
70
|
-
|
|
71
56
|
return el;
|
|
72
57
|
};
|
|
73
|
-
|
|
74
58
|
case 'addEventListener':
|
|
75
59
|
return function () {
|
|
76
60
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
77
61
|
args[_key] = arguments[_key];
|
|
78
62
|
}
|
|
79
|
-
|
|
80
63
|
eventListeners.push(args);
|
|
81
64
|
return target.addEventListener.apply(target, args);
|
|
82
65
|
};
|
|
83
|
-
|
|
84
66
|
case 'removeEventListeners':
|
|
85
67
|
return function () {
|
|
86
|
-
var
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
try {
|
|
90
|
-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
91
|
-
var args = _step.value;
|
|
92
|
-
target.removeEventListener.apply(target, (0, _toConsumableArray2.default)(args));
|
|
93
|
-
}
|
|
94
|
-
} catch (err) {
|
|
95
|
-
_iterator.e(err);
|
|
96
|
-
} finally {
|
|
97
|
-
_iterator.f();
|
|
68
|
+
for (var _i = 0, _eventListeners = eventListeners; _i < _eventListeners.length; _i++) {
|
|
69
|
+
var args = _eventListeners[_i];
|
|
70
|
+
target.removeEventListener.apply(target, (0, _toConsumableArray2.default)(args));
|
|
98
71
|
}
|
|
99
72
|
};
|
|
100
|
-
|
|
101
73
|
default:
|
|
102
|
-
}
|
|
103
|
-
|
|
74
|
+
}
|
|
104
75
|
|
|
76
|
+
// TODO: hijack document.getElementsByTagName('body')
|
|
105
77
|
if (typeof target[name] === 'function') {
|
|
106
78
|
return target[name].bind && target[name].bind(target);
|
|
107
79
|
} else {
|
package/lib/Elements.js
CHANGED
|
@@ -1,69 +1,55 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
-
|
|
7
5
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
8
|
-
|
|
9
6
|
var _injectScriptCallBack = _interopRequireWildcard(require("./utils/injectScriptCallBack"));
|
|
10
|
-
|
|
11
7
|
var _isSSR = require("./utils/isSSR");
|
|
12
|
-
|
|
13
8
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
14
|
-
|
|
15
9
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
16
|
-
|
|
17
10
|
var makeElInjector = function makeElInjector(originMethod, methodName) {
|
|
18
11
|
return function (el) {
|
|
19
|
-
var notAllowed = el.ownerContext && el.ownerContext.allowResources.indexOf(el.src) === -1 && el.ownerContext.allowResources !== '*';
|
|
12
|
+
var notAllowed = el.ownerContext && el.ownerContext.allowResources.indexOf(el.src) === -1 && el.ownerContext.allowResources !== '*';
|
|
20
13
|
|
|
14
|
+
// 如果不在 BrowserVM 的白名单内,尝试通过 context 的 load script 通过 xhr 获取脚本内容,并在沙箱中执行
|
|
21
15
|
if (el && el._evalScriptInSandbox && el.ownerContext && el.nodeName === 'SCRIPT' && el.src && notAllowed && !(0, _injectScriptCallBack.getJsonCallback)(el.src)) {
|
|
22
16
|
return el.ownerContext.loadScripts(el.src).then(function () {
|
|
23
17
|
var fns = el._listenerMap.get('load');
|
|
24
|
-
|
|
25
18
|
if (fns) {
|
|
26
19
|
fns.forEach(function (fn) {
|
|
27
20
|
fn();
|
|
28
21
|
});
|
|
29
22
|
}
|
|
30
|
-
|
|
31
23
|
var e = new Event('load');
|
|
32
24
|
el.onload && el.onload(e);
|
|
33
25
|
}).catch(function (e) {
|
|
34
26
|
console.error(e);
|
|
35
|
-
|
|
36
27
|
var fns = el._listenerMap.get('error');
|
|
37
|
-
|
|
38
28
|
if (fns) {
|
|
39
29
|
fns.forEach(function (fn) {
|
|
40
30
|
fn(e);
|
|
41
31
|
});
|
|
42
32
|
}
|
|
43
|
-
|
|
44
33
|
el.onerror && el.onerror(e);
|
|
45
34
|
});
|
|
46
35
|
}
|
|
47
|
-
|
|
48
36
|
if (el && el.nodeName === 'SCRIPT' && el.ownerContext) {
|
|
49
37
|
(0, _injectScriptCallBack.default)(el);
|
|
50
|
-
}
|
|
51
|
-
// 所以直接执行这个 script
|
|
52
|
-
|
|
38
|
+
}
|
|
53
39
|
|
|
40
|
+
// 如果有 scriptText, 证明在 append 之前被设置了 text
|
|
41
|
+
// 所以直接执行这个 script
|
|
54
42
|
if (el && el.scriptText) {
|
|
55
43
|
el.ownerContext.evalScript(el.scriptText);
|
|
56
|
-
}
|
|
57
|
-
// 这里 尝试 try catch 如果报错 直接调用 fn.apply
|
|
58
|
-
|
|
44
|
+
}
|
|
59
45
|
|
|
46
|
+
// fix: babel 会把 fn.call 转义成 fn.call.apply 造成 chrome 50 的几个版本报错
|
|
47
|
+
// 这里 尝试 try catch 如果报错 直接调用 fn.apply
|
|
60
48
|
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
61
49
|
args[_key - 1] = arguments[_key];
|
|
62
50
|
}
|
|
63
|
-
|
|
64
51
|
var methodArgs = methodName === 'append' && el === undefined // 修复 append 的过程中 append() 为一个没参数的状态。应为 append 的函数签名为 append(param1, param2, /* ... ,*/ paramN)
|
|
65
52
|
? [].concat(args) : [el].concat(args);
|
|
66
|
-
|
|
67
53
|
try {
|
|
68
54
|
return originMethod.call.apply(originMethod, [this].concat((0, _toConsumableArray2.default)(methodArgs)));
|
|
69
55
|
} catch (_unused) {
|
|
@@ -71,10 +57,8 @@ var makeElInjector = function makeElInjector(originMethod, methodName) {
|
|
|
71
57
|
}
|
|
72
58
|
};
|
|
73
59
|
};
|
|
74
|
-
|
|
75
60
|
if (!(0, _isSSR.isSSR)() && typeof window.Element === 'function') {
|
|
76
61
|
var mountElementMethods = ['appendChild', 'insertBefore', 'append'];
|
|
77
|
-
|
|
78
62
|
for (var _i = 0, _mountElementMethods = mountElementMethods; _i < _mountElementMethods.length; _i++) {
|
|
79
63
|
var method = _mountElementMethods[_i];
|
|
80
64
|
var originMethod = window.Element.prototype[method];
|