我的网页可能被某些旧浏览器加载(特别是在带有WebView的Android应用程序中,可能仍会被一些相当旧的设备使用)...不是很多,所以我不想去要完全支持它们太麻烦了,但我至少要加载页面。因此,我宁愿不依靠转发器等来支持完全向后兼容的所有内容。
那么如何制作我的代码"安全"在旧版浏览器上使用?我的代码中使用promises的那些部分是" optional"从某种意义上说,如果它们不可访问,那么该页面仍将是有用的。因此,我希望能够在我的代码中包含承诺,而不会破坏旧浏览器的内容。
是否足以将这些部分放入支票承诺支持,例如if (window.Promise) { myPromise = getMeAPromise(); mPromise.then(...).catch(...); }
,以便解释器永远不会到达这些部分?或者是否存在仍会导致在不受支持的浏览器上失败的编译过程?
答案 0 :(得分:4)
只要您以不会失败的方式测试支持,您就不必担心。您的if (window.Promise)
符合该定义,但如果是我,我会使用if (typeof Promise !== "function")
。所以也许:
var hasPromiseSupport = typeof Promise === "function";
...然后if (hasPromiseSupport)
围绕可选位。
所有这些都说:有完整的Promise polyfills可用,所以你可以有条件地包含一个:
if (typeof Promise !== "function") {
document.write('<script src="some-promise-polyfill.js"><\/script>');
}
......然后你就有了承诺。 (是的,在我看来,这是document.write
剩余的有效用例。)