iOS Chrome - 在翻译页面时,xhr.timeout会抛出错误。

5

这是一个相当超现实的问题。当我在iOS上使用Chrome时,无法设置xhr.timeout,它会抛出InvalidAccessError:对象不支持操作或参数。

您可以通过在iOS上的Chrome中转到https://viktorh.net/chromebug.html并使用Chrome内置翻译器翻译页面来重现此问题 - 现在调用XHR.timeout失败。

有没有人知道为什么会这样?如果这是Chrome的错误,有没有人知道解决方法?在哪里可以报告此类问题?

1个回答

1

这很奇怪。我可以重现这个问题,看起来是Chrome在iOS上的一个小bug。默认情况下,XMLHttpRequest具有无限超时时间,但您可以通过手动创建超时来解决此问题以中止请求。为了安全起见,在请求成功或失败时,我会在loadend时清除此超时。就像这样:

         var oReq = new XMLHttpRequest();
         oReq.addEventListener("load", reqListener);
         var timeout;
         oReq.addEventListener("loadend", function() {
            // request over - clear timeout
            clearTimeout(timeout);
         });
         // set a timeout to abort the request
         timeout = setTimeout(function() {
            oReq.abort();
            // we timed out
         },20000);

         oReq.open("GET", "/");

一个公平的解决方案,谢谢!在我的情况下,在这种情况下设置超时不是非常重要的,所以我用try-catch包围它 - 但在大型项目中这变得相当笨拙! - rutchkiwi
不用担心。如果这是一个大项目,你可能需要考虑使用 AJAX 库,Axios 或 Superagent 都不错,或者使用 fetch(如果你要支持旧浏览器,则需要使用 polyfill)。这将有助于使代码更加简洁。 - jcbdrn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接