Javascript 如何获取HTML DOM类的原始构造函数?

Javascript 如何获取HTML DOM类的原始构造函数?,javascript,html,Javascript,Html,另一个我无法控制的脚本是覆盖window.URL,如何获取构造函数 我无法控制的代码: URL = "not the constructor you seek"; 我的代码: var myUrl = new window.URL(someString); 失败,TypeError:URL不是构造函数 有没有办法获取window.URL的原始值?我无法运行能够首先可靠执行的代码,这是一个有点不友好的执行环境。如果您的脚本需要在不友好的环境中执行,您实际上无法保证它能够正确执行 尽管如此,有些方

另一个我无法控制的脚本是覆盖window.URL,如何获取构造函数

我无法控制的代码:

URL = "not the constructor you seek";
我的代码:

var myUrl = new window.URL(someString);
失败,TypeError:URL不是构造函数


有没有办法获取window.URL的原始值?我无法运行能够首先可靠执行的代码,这是一个有点不友好的执行环境。

如果您的脚本需要在不友好的环境中执行,您实际上无法保证它能够正确执行

尽管如此,有些方法比其他方法“更安全”(即不太可能被覆盖)

我在过去使用过的一种技术可以帮助您在这里访问一个干净的
窗口
作为沙箱,并从该沙箱的上下文中运行所有代码:

const sandbox = document.createElement('iframe')
sandbox.src = 'about:blank'
sandbox.style.display = 'none'
document.body.appendChild(sandbox)
const sandboxWindow = sandbox.contentWindow
console.log(new sandboxWindow.URL('http://example.com'))

您是否尝试过
top.URL()
?但是,它可能指向同一件事…代码失败的浏览器和版本是什么?如果您可以获得任何想要使用的类的实例,您可能可以通过
theUrl.constructor
获取其构造函数fn。显然,这并不一定在所有情况下都有帮助,但可以涵盖某些情况。@Peter最新的chrome、edge、firefox和Safaridos
关于:blank
总是绕过CORS限制?@Marie,这是一个我不知道答案的好问题。我知道,如果页面加载到沙盒中,则无法使用此技术(这就是为什么它不能作为堆栈片段工作的原因),但我的理解是,
about:blank
是一个没有来源的空白文档,因此CORS不是问题。