javascript - 拦截 react native webview 的每一个请求

标签 javascript reactjs react-native webview interceptor

我正在尝试创建一个 WebView,它有一个钩子(Hook),可以捕获每个请求,拦截它,允许我 编辑 它并在之后发送。但是我无法找到一种方法来拦截 webview 的每个请求(不仅仅是使用 onNavigationStateChange 更改 url)。

下一步也是改变响应。

任何想法如何在 React Native 中实现这样的目标?

最佳答案

您可以尝试在 XMLHttpRequest 的帮助下注入(inject) js 来拦截 HTTP 请求/响应。这就是我为我的目的所做的;

const MyWebview = props => {

const INJECTED_JAVASCRIPT = `(function() {
var open = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function() {
    this.addEventListener("load", function() {
        var message = {"status" : this.status, "response" : this.response}
        window.ReactNativeWebView.postMessage(JSON.stringify(message));
    });
    open.apply(this, arguments);
};})();`;

return (
  <WebView
    source={{ uri: 'https://example.com/' }}
    injectedJavaScript={INJECTED_JAVASCRIPT}
    onMessage={event => {
      console.log('>>>', event);
    }}
  />
 );
};

export default NewsWebview;
基本上我们在这里所做的是,在 INJECTED_JAVASCRIPT 上添加一个监听器。 ,以跟踪每个成功的 XMLHttpRequest 事务完成。并使用
window.ReactNativeWebView.postMessage(JSON.stringify(message));
我们通过 onMessage 向 WebView 发送每个响应支柱。
More on how XMLHttpRequest works

关于javascript - 拦截 react native webview 的每一个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57495560/

相关文章:

javascript - jqGrid 获取当前rowid

javascript - zlib.gzip针对不同操作系统上的相同输入产生不同的结果

javascript - React Native 注册按钮问题

reactjs - react native 开始给出无效的正则表达式无效错误

react-native - 如何使用 react 导航推送新场景?

javascript - 有没有可以发出 LLVM 字节码的 Javascript 引擎?

javascript - Vis.js 在时间轴中只显示营业时间

javascript - 使用 React 应用程序的 Express 处理路线?

javascript - 使用带有异步获取变量的 react-apollo 调用 graphql 查询

javascript - 我需要在 react 功能中清除超时吗?