介绍PayPal的开源跨域javascript套件

在PayPal,我们编写了很多JavaScript,这些JavaScript最终在其他网站和其他域上运行。 最好的例子是checkout.js,这是我们整个结帐体验的集成脚本,它使商家可以将我们的按钮和结帐流程无缝地嵌入其站点。 但是,在第三方站点上运行我们的代码有很多危险和陷阱: 我们绝对不能破坏任何网站。 这意味着我们不会创建未修改的全局变量,包括用于浏览器API的polyfill。 这样做通常会导致几乎无法跟踪的问题。 网站绝对可以破坏我们,而且经常如此。 最近的一个例子是一个站点,该站点覆盖了Array.prototype.toJSON ,从而破坏了JSON.stringify 。 许多站点都包含WeakMap ,该WeakMap不能像本机版本那样在跨域窗口对象上运行。 因此,我们不能相信没有先创建或验证的任何内容。 跨域限制(例如,在不同域上的页面上运行iframe或弹出窗口时,您可以做或不能做的事情)令人难以置信,并且规则经常根据所使用的浏览器而变化。例如,在IE和Edge中,从字面上看,您不能在其他域的弹出窗口和父窗口之间发送消息,而无需诉诸于骇人听闻的骇客。 有些浏览器确实做得很奇怪。 例如,要测试窗口是同一域还是跨域,唯一可行的方法是try/catch访问或设置窗口对象的属性。 即便如此,Safari仍坚持将跨域错误记录到控制台,即使已捕获该错误。 当我们的商人向我们提出错误报告只是为了告诉我们他们忽略该错误时,这个问题就不会引起混乱。…