React-native 无法使用 xhr2-cookies

本文介绍了解决React-Native应用中因使用xhr2-cookiesjs库导致HTTP请求失败的问题。通过修改代码逻辑或在运行时注入location属性到global对象,实现了在不大幅改动SDK的情况下,使React-Native应用能够正常发送HTTP请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在学习react-native的开发并写了一些demo

因为SDK使用了 xhr2-cookies js库,导致RN无法发送http请求。业务要求在尽量不更改SKD的情况下适配RN。

最近经过不断排查发现Node库中有这么一条语句

    var defaultProtocol = global.location.protocol.search(/^https?:$/) === -1 ? 'http:' : ''
复制代码

global下没有 location 导致这条语句直接catch了 请求当然没有发出去。

于是我想到了两种方式解决这个问题。

  1. 直接更改编译后的文件
    var defaultProtocol = null;
    if (global.location) {
        defaultProtocol = global.location.protocol.search(/^https?:$/) === -1 ? 'http:' : ''
    }
    else {
      defaultProtocol = 'http:'
    }
复制代码

比较暴力,直接更改了编译后的代码,在判断没有location的时候将默认的 Protocol 配置成 'http:'

因为不想这么暴力,所以我使用了另一种方法,在RN初始化时向 global 中注入一个 location

  1. 在初始化前注入 location

因为我同时用到了 crypto 的库, 所以我使用了 react-native-crypto 如何使用可以查看 react-native-crypto

在生成的 shim.js 文件中,手动注入了location

    config = {
        protocol: '' // 'https'
    }

    global.location = {
        protocol: config.protocol
    };
复制代码

这样请求就成功的被发送并反回了对应的数据。

新人第一次写文。 如果有哪里写的不对或者不够完善,欢迎各位指正。

转载于:https://juejin.im/post/5cd38e58f265da035b61b12e

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值