禁用远程调试时应用程序在启动时崩溃

2023-12-26

我正在尝试在我的手机(iPhone)上安装我的反应本机应用程序。它安装正常,但在启动时崩溃并显示此错误消息 -

undefined is not an object (evaluating 'navigator.userAgent.indexOf')

<unknown>
     :12:71
loadModuleImplementation
    require.js:213:12
<unknown>
    getScrollPosition.js:12:31

如果我随后启用远程 js 调试,它会重新加载并且一切正常。我禁用远程调试,应用程序又崩溃了。知道这里会发生什么吗?

更新 - 罪魁祸首代码位于 fbjs 包中 -https://github.com/facebook/fbjs/blob/master/packages/fbjs/src/core/dom/getDocumentScrollElement.js https://github.com/facebook/fbjs/blob/master/packages/fbjs/src/core/dom/getDocumentScrollElement.js

他们检查是否navigator是否已定义,然后尝试访问其第二级属性 -navigator.userAgent.indexOf.

我可以假装navigator.userAgent或者向 fbjs 发送 PR。


navigator https://developer.mozilla.org/en-US/docs/Web/API/Window/navigator是浏览器中可用的全局 Web API。这在 React Native 中不可用,因为它不是 Web 浏览器。并非所有 Web API 都是全局环境的一部分。这就是为什么navigator.userAgent.indexOf正在抛出undefined error.

现在你的程序在远程调试 JS 时运行良好的原因是,当你远程调试时,React Native 会切换到使用 Chrome 提供的 JavaScript 引擎(或者你正在调试的任何东西),而不是核心引擎。因此,在调试时,您将可以访问浏览器通常具有的全局 Web API。

这是一个非常棘手的问题,经常会让人陷入困境,因为大多数人在开发时都一直打开调试。经验法则:React Native 不是浏览器。不要使用您在进行 Web 开发时通常使用的任何全局变量,这样您就可以避免大多数此类类型的陷阱错误。

如果您想了解如何在 React Native 的 JavaScript 引擎中填充这些全局变量(通常使用空对象),您需要查看初始化Core.js https://github.com/facebook/react-native/blob/master/Libraries/Core/InitializeCore.js。在这里你可以看到React Native将会polyfillnavigator像这样:

// Set up Geolocation
let navigator = global.navigator;
if (navigator === undefined) {
  global.navigator = navigator = {};
}

// see https://github.com/facebook/react-native/issues/10881
polyfillObjectProperty(navigator, 'product', () => 'ReactNative');
polyfillObjectProperty(navigator, 'geolocation', () => require('Geolocation'));

Edit:回答后续并给出解决方法。

您可以对其进行填充,但您需要在导入任何其他文件之前执行此操作index.js(您的应用程序的根目录)。这是它是如何完成的node-libs-react-native https://github.com/parshap/node-libs-react-native#globals和他们的全局变量.js https://github.com/parshap/node-libs-react-native/blob/master/globals.js他们也在文件中设置了默认的用户代理字符串。对此进行调整,您可以通过执行以下操作来获得相同的结果:

  1. 创建文件来保存垫片,globals.js:

    global.navigator.userAgent = 'React Native';
    
  2. 在导入任何其他文件之前导入/需要它index.js:

    import { AppRegistry } from "react-native";
    import globals from "./globals";
    import App from "./App";
    
    AppRegistry.registerComponent("RNSandbox", () => App);
    

如果出于某种原因你想要userAgent为了有所不同或取决于您是否正在调试,您可以将自己的逻辑添加到globals.js.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

禁用远程调试时应用程序在启动时崩溃 的相关文章

随机推荐

  • 为什么 \$ 在反引号内减少为 $ [尽管不在 $(...)] 内?

    在回顾 POSIX 标准时 我遇到了另一个相当技术性 毫无意义的问题 它states http pubs opengroup org onlinepubs 9699919799 utilities V3 chap02 html tag 18
  • 单元测试/与 Simulink/Stateflow 持续集成

    如何在 Simulink 或者最好是 Stateflow 中执行单元测试 我是敏捷软件方法的粉丝 包括测试驱动开发 我负责安全关键控制软件的开发 我们使用 Matlab Simulink Stateflow 来开发它 选择此工具集是因为与工
  • Ckeditor:使用 Firefox 内置的拼写检查器

    我觉得这里有点进退两难 我想使用 Firefox 的内置拼写检查功能 而不禁用 Ckeditor 的上下文菜单 因为这会导致无法使用表格 有没有一种方法可以两全其美 您可以尝试设置禁用本机拼写检查器 http docs cksource c
  • 更改 tr 背景颜色

    我有这样的事情 tr style background color Yellow 当我单击一行时 我想更改其背景颜色 我这样做 function SetBackgroundColor rowId rowId css background c
  • 错误 LNK1104:无法打开文件“libboost_serialization-vc110-mt-gd-1_53.lib”

    我使用 Boost 序列化创建一个简单的 XML 文件 但是在调试时出现此错误 错误 LNK1104 无法打开文件 libboost serialization vc110 mt gd 1 53 lib 我已尝试按照以下答案解决我的问题这个
  • 如何使用 django 发送包含动态内容的 html 电子邮件?

    谁能帮我发送带有动态内容的 html 电子邮件 一种方法是将整个 html 代码复制到一个变量中 并在 Django 视图中填充其中的动态代码 但这似乎不是一个好主意 因为它是一个非常大的 html 文件 我将不胜感激任何建议 Thanks
  • 逗号分隔具有相同行数的值

    数据库结构 items id name users id username 用户项目 id user id item id 我目前有一个count on user items显示拥有最多项目的用户 john 13 bill 9 lily 9
  • 使用 OpenCV 检查图像的相似性

    OpenCV 是否支持比较两个图像 返回一些值 可能是百分比 来指示这些图像的相似程度 例如 如果相同的图像被传递两次 则返回 100 如果图像完全不同 则返回 0 我已经在 StackOverflow 上阅读了很多类似的主题 我也做了一些
  • 如何在 Laravel 中进行简单的重定向?

    我在 Laravel 中有一个函数 最后我想重定向到另一个函数 我如何在 Laravel 中做到这一点 我尝试过类似的东西 return redirect gt route listofclubs 这不起作用 listofclubs 的路线
  • 如何在 Bootstrap 中垂直居中容器?

    我正在寻找一种垂直居中的方法container里面的divjumbotron并将其设置在页面中间 The jumbotron必须适应屏幕的整个高度和宽度 这 containerdiv 的宽度为1025px并且应该位于页面的中间 垂直居中 我
  • 在 TensorFlow 中,如何使用 python 从张量中获取非零值及其索引?

    我想做这样的事情 假设我们有一个张量 A A 1 0 0 4 我想从中获取非零值及其索引 Nonzero values 1 4 Nonzero indices 0 0 1 1 Numpy 中也有类似的操作 np flatnonzero A
  • Google 跟踪代码管理器:事件跟踪不起作用

    我尝试使用标签管理器跟踪我网站上所有邮件链接的点击次数 但它根本不起作用 使用 firebug 查看网络传输 我可以看到没有任何内容提交给 Google 当然 我的 Analytics 界面中也没有出现任何内容 我已使用 jQuery 将推
  • C 动作和变量

    为什么当我使用 char paraula 15 int longparaula 0 copia paraula paraula longparaula 它说longparaula 0 paraula 没问题 并且包含我输入的字符的值 但 l
  • 将大的 2^63 十进制转换为二进制

    我需要将大十进制转换为二进制 我该怎么做 有问题的十进制是这个 3324679375210329505 怎么样 String binary Long toString 3324679375210329505L 2
  • 获取有关自动变量的帮助不起作用

    我正在研究 PowerShell 建议致电网站和书籍Get Help about Automatic Variables例如 获取返回的自动变量列表 我尝试打电话Get Help使用以下参数 但我总是得到返回的 cmdlet 列表 abou
  • PyQt 事件发出两次

    我正在尝试实现 拖放 项目QListWidget to QGraphicsView 我继承了自己的班级MooView from QGraphicsView并封装dragMove dragEnter and drop事件 但在测试时 我注意到
  • 使用“ec2-user”登录,而不是使用 aws 中的用户数据 root 登录

    我有一个基于 RHEL 6 4 64 位 AMI 的 Amazon EC2 实例 写完一些shell脚本后 我用它创建了自己的 AMI 映像 我正在编写用户数据部分 它将删除 home ec2 user sudo rm rf home ec
  • OpenSSL 在 PKCS12 导出期间挂起,并显示“将‘屏幕’加载到随机状态”

    我正在使用 OpenSSL 不是 makecert 生成自签名 SSL 证书 以在 IIS 中使用 openssl req x509 newkey rsa 2048 keyout key pem out cert pem days 365
  • 创建和使用 Laravel 4 命令

    编辑 找出我出错的地方并将答案放在最后 我正在尝试创建一个 Laravel 命令 我可以看到它与 Laravel 3 中的 任务 相比发生了很大的变化 但是我似乎无法让它运行 这些是我已采取的步骤 php artisan 命令 make 导
  • 禁用远程调试时应用程序在启动时崩溃

    我正在尝试在我的手机 iPhone 上安装我的反应本机应用程序 它安装正常 但在启动时崩溃并显示此错误消息 undefined is not an object evaluating navigator userAgent indexOf