iframe.js.map
7.17 KB
{"version":3,"sources":["dom/iframe.js"],"names":[],"mappings":"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","file":"iframe.js","sourcesContent":["// Support for iframes.\n\n\nconst DOM = require('./index');\nconst resourceLoader = require('jsdom/lib/jsdom/browser/resource-loader');\n\n\nfunction loadFrame(frame) {\n // Close current content window in order to open a new one\n if (frame._contentWindow) {\n frame._contentWindow.close();\n delete frame._contentWindow;\n }\n\n function onload() {\n frame.contentWindow.removeEventListener('load', onload);\n const parentDocument = frame._ownerDocument;\n const loadEvent = parentDocument.createEvent('HTMLEvents');\n loadEvent.initEvent('load', false, false);\n frame.dispatchEvent(loadEvent);\n }\n\n // This is both an accessor to the contentWindow and a side-effect of creating\n // the window and loading the document based on the value of frame.src\n //\n // Not happy about this hack\n frame.contentWindow.addEventListener('load', onload);\n}\n\n\nfunction refreshAccessors(document) {\n const window = document._defaultView;\n const frames = document.querySelectorAll('iframe,frame');\n for (let i = 0; i < window._length; ++i)\n delete window[i];\n window._length = frames.length;\n Array.prototype.forEach.call(frames, function (frame, i) {\n window.__defineGetter__(i, ()=> frame.contentWindow );\n });\n}\n\nfunction refreshNameAccessor(frame) {\n const name = frame.getAttribute('name');\n // https://html.spec.whatwg.org/multipage/browsers.html#named-access-on-the-window-object:supported-property-names\n if (name) {\n // I do not know why this only works with _global and not with _defaultView :(\n const window = frame._ownerDocument._global;\n delete window[name];\n if (isInDocument(frame))\n window.__defineGetter__(name, ()=> frame.contentWindow );\n }\n}\n\nfunction isInDocument(el) {\n const document = el._ownerDocument;\n let current = el;\n while ((current = current.parentNode))\n if (current === document)\n return true;\n return false;\n}\n\n\nDOM.HTMLFrameElement.prototype._attrModified = function (name, value, oldVal) {\n DOM.HTMLElement.prototype._attrModified.call(this, name, value, oldVal);\n if (name === 'name') {\n if (oldVal)\n // I do not know why this only works with _global and not with _defaultView :(\n delete this._ownerDocument._global[oldVal];\n refreshNameAccessor(this);\n } else if (name === 'src' && value !== oldVal && isInDocument(this))\n loadFrame(this);\n};\n\nDOM.HTMLFrameElement.prototype._detach = function () {\n DOM.HTMLElement.prototype._detach.call(this);\n if (this.contentWindow)\n this.contentWindow.close();\n refreshAccessors(this._ownerDocument);\n refreshNameAccessor(this);\n};\n\nDOM.HTMLFrameElement.prototype._attach = function () {\n DOM.HTMLElement.prototype._attach.call(this);\n loadFrame(this);\n refreshAccessors(this._ownerDocument);\n refreshNameAccessor(this);\n};\n\nDOM.HTMLFrameElement.prototype.__defineGetter__('contentDocument', function() {\n return this.contentWindow.document;\n});\n\nDOM.HTMLFrameElement.prototype.__defineGetter__('contentWindow', function() {\n if (!this._contentWindow) {\n const createHistory = require('../history');\n const parentDocument = this._ownerDocument;\n const parentWindow = parentDocument.defaultView;\n\n // Need to bypass JSDOM's window/document creation and use ours\n const openWindow = createHistory(parentWindow.browser, (active)=> {\n // Change the focus from window to active.\n this._contentWindow = active;\n });\n\n const src = this.src.trim() === '' ? 'about:blank' : this.src;\n this._contentWindow = openWindow({\n name: this.name,\n url: resourceLoader.resolveResourceUrl(parentDocument, src),\n parent: parentWindow,\n referrer: parentWindow.location.href\n });\n }\n return this._contentWindow;\n});\n"]}