3

我正在尝试在 Android 中使用 shouldInterceptRequest for WebView 来拦截请求。加载的 url 包含 javascript "fetch" 命令,这会导致错误:"Fetch API cannot load file:///xxxxxx. URL scheme "file" is not supported."。

我还没有设法找到为什么 fetch 在 Windows 上成功执行,但在 Android 上却失败了。我知道可以通过 XMLHttpRequest 替换 fetch 或在网页端使用 polyfill,但我只想在 Android 端进行修改。

有一些代码可以重现错误:

evaluateJavascript(
    "(function() {\n" +
    "fetch('file:///xxxxxx')\n" +
    ".then(response => console.log('Success'))\n" +
    ".catch(err => console.log('Fail', err));\n" +
    "})();", null);

WebView也允许一切:

getSettings().setAllowContentAccess(true);
getSettings().setAllowFileAccess(true);
getSettings().setAllowFileAccessFromFileURLs(true);
getSettings().setAppCacheEnabled(true);
getSettings().setDatabaseEnabled(true);
getSettings().setDomStorageEnabled(true);
getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
getSettings().setJavaScriptEnabled(true);
getSettings().setMediaPlaybackRequiresUserGesture(false);
getSettings().setAllowUniversalAccessFromFileURLs(true);

是否可以仅在 Android 端进行修改以支持“获取”?如何了解 Android WebView 中缺少对 Fetch API“文件”方案的支持的原因?

4

0 回答 0