如何在我的 Android WebView 子类中重写 XMLHttpRequest 以便 head 中的脚本将使用我重写的 XHR?

ajh*_*158 5 android xmlhttprequest webview

我正在开发一个自定义 Android Web 浏览器,并且需要解决 XHR 中的错​​误。我想使用 javascript XHR 包装器来修复该错误(我已经修复了)。

在加载其他任何内容(包括头部的脚本)之前,如何强制在每个页面加载时加载此内容?

请注意,我无法控制的任意网页内容将被加载到我的网页视图中,因此我无法执行从 html 页面加载脚本之类的操作。我需要做一些事情,比如拦截 head 中的第一个脚本请求并同步注入我的脚本。我不确定这种确切的方法是否可行 - 只是试图提供一个可以满足我的要求的方法的示例。

我愿意采用完全不同的方法 - 我只知道如何通过 javascript 包装器来修复它。

我需要修复的错误的详细信息并不重要,但以防万一有人好奇,非 android_asset 文件 url 的成功 XMLHttpRequest 会将状态设置为 0,并将 statusText 设置为“”。由于某些使用 XHR 的框架将 status!=200 和/或 statusText!="OK" 视为错误,因此我需要覆盖默认行为并返回 status=200 和 statusText="OK" 以获得非 android_asset 文件的成功 XMLHttpRequests网址。

ajh*_*158 0

由于最近有人对此表示支持,并且没有其他人提供任何意见,因此我将分享我最终为解决该问题所做的事情,即使它并没有真正解决我最初的问题。

就我而言,我只加载本地(即在加载到 web 视图之前在本地复制的动态文件)html 文件,在将它们加载到 web 视图之前我可以通过文件系统访问这些文件。因此,我有机会在加载文件之前修改文件。由于我找不到更好的方法,我只是插入一个脚本标记作为 head 的第一个子标记,以确保 XHR 覆盖发生在其他任何事情之前。

如果您想了解更多详细信息,请随时发表评论 - 我会尽力回答!