我正在研究一个相当于自定义 android 网络浏览器的东西,需要解决 XHR 中的一个错误。 我想使用修复该错误的 javascript XHR 包装器(我已经有了修复程序)。
如何在加载其他任何内容(包括头部脚本)之前强制在每次页面加载时加载它?
请注意,我无法控制的任意 Web 内容将加载到我的 Web View 中,因此我无法执行任何操作,例如从 html 页面加载我的脚本。我需要做一些事情,比如拦截 head 中的第一个脚本请求并同步注入(inject)我的脚本。我不确定这种确切的方法是否可行 - 只是想提供一个能够满足我的要求的方法示例。
我愿意接受一种完全不同的方法 - 我只知道如何通过 javascript 包装器修复它。
我需要修复的错误的详细信息并不重要,但以防万一有人好奇,非 android_asset 文件 url 的成功 XMLHttpRequests 将状态设置为 0,将 statusText 设置为“”。由于某些使用 XHR 的框架将 status!=200 和/或 statusText!="OK"视为错误,因此我需要重写默认行为并返回 status=200 和 statusText="OK"以获取非 android_asset 文件的成功 XMLHttpRequests网址。
最佳答案
由于最近有人对此进行了投票并且没有其他人提供任何意见,我将分享我最终为解决该问题所做的工作,即使它并没有真正解决我最初的问题。
在我的例子中,我只加载本地(即,在加载到 webview 之前在本地复制的动态文件)html 文件,在将它们加载到 webview 之前,我可以通过文件系统访问这些文件。因此,我有机会在加载它们之前修改文件。由于我找不到更好的方法,我只是插入一个脚本标记作为 head 的第一个 child ,以确保 XHR 覆盖先于其他任何事情发生。
如果您想了解更多详情,请随时发表评论 - 我会尽力回答!
关于android - 我如何在我的 Android WebView 子类中覆盖 XMLHttpRequest 以便 head 中的脚本将使用我覆盖的 XHR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27286398/