我有一个React Native应用程序,它使用WebView从资产中呈现HTML页面。该页面有一些javascript进行一些处理。问题是我无法从Web视图中看到console.log
语句。我尝试过Chrome Remote Remote Debugging WebViews
下面是代码的样子。注意,对于Android,我试图提供一些本地属性来启用调试。
import React from 'react';
import Expo from 'expo';
import { WebView } from 'react-native';
export default class App extends React.Component {
render() {
const htmlURL = Expo.Asset.fromModule(require('./assets/index.html')).uri;
return (
<WebView nativeConfig={{props: {webContentsDebuggingEnabled: true}}}
source={{uri: htmlURL}} />
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center',
},
});
任何关于如何工作的想法都将受到高度赞赏。
7条答案
按热度按时间ffx8fchx1#
您可以从WebView内部使用
window.postMessage
和WebView组件的onMessage
属性:在html中:
在react原生组件中:
hgb9j2n62#
对于试图在Mac for iOS模拟器或连接设备上执行此操作的人:=〉使用safari技术预览-〉开发-〉模拟器-〉原生应用程序
jsContext和Webview都将可见,以打开用于调试+控制台这提供了所有典型调试器功能
额外好处:您甚至可以使用windows for jscontext来解决react原生类等问题。例如,在您的应用程序类中添加“window.app = this;”,然后您可以通过控制台访问您的应用程序类对象。
dffbzjpn3#
只是想补充一点,官方的
react-native-webview
库有一个关于Debugging的部分,你可能会发现很有帮助!9bfwbjaz4#
在React Native中检查WebView最简单的方法是使用Remote JS Debugger。这对于在iOS或Android中工作都有额外的好处,因为你只是在调试应用程序上运行的JavaScript。
为了查看WebView,您需要更进一步,使用Chrome's Remote Devices。
如果单击与要调试得
index.html
匹配得文档旁边得检查,则可以在控制台中查看该WebView得所有日志.我在
<header>
的index.html
中添加了一个<script>
,它只执行以下操作:console.log('This is showing in the console!')
您可以在上图中看到,它在检查该WebView的DevTools中注销。
有关react-native-webview调试指南的更多信息,请访问Debugging Guide Docs
tquggr8v5#
不确定它是否与您的情况相关,但如果您也在为iOS开发,有一个非常简单的方法可以在Mac + iOS模拟器(或真实设备)上完成。最后,React Native
WebView
创建一个本地web视图(iOS上的UIWebView
,Android上的WebView
),因此任何适用于web应用的调试方法都适用于此处。1.在iOS模拟器(或设备)上:打开设置应用程序-〉Safari -〉高级-〉打开Web检查器。
1.在Mac上打开Safari并在以下位置启用开发者模式:首选项-〉高级-〉在菜单栏中显示开发者菜单(底部的复选框)。
1.在Mac上的Safari中,你现在会看到“开发”菜单。打开它,找到模拟器或你连接的设备。当你悬停在这个菜单项上时,你会看到当前加载的页面。这对设备上加载的任何页面都有效,无论它是在你的应用程序中以
WebView
显示还是在系统浏览器上显示。1.选择页面后,您可以使用Safari Web检查器执行几乎任何操作:查看所有加载的资源、网络请求、突出显示元素、控制台日志、调试JS代码等等。
0ejtzxu16#
我建议统一
javascript's
控制台消息(console.log
)和logcat
合并为一个logcat,可通过[Monitor]查看。(https://developer.android.com/studio/profile/am-basics.html)。将控制台消息和WebView
消息放在一个位置会很有帮助,尤其是当您遇到争用条件/计时问题时,这样你就可以看到事件的顺序。监视器还允许你应用过滤器,选择你看到的消息。iOS用户也会觉得这很有帮助。以下是一个示例:x1c 0d1x有关如何在React Native中自定义
WebView
(用于构建用户界面的JavaScript library
。“它由Facebook
、Instagram
以及个人开发人员和企业社区”wiki“维护)的一些背景信息,请参见CustomWebViewManager and CustomWebView in React Native。信息:WebChromeClient让你处理
Javascript's
console.log("message")
{via
onConsoleMessage(ConsoleMessage cm)
}、alert()
等功能。捕获JavaScript的控制台消息:
cross platform支持的问题是Virtual Machine和相关的Sandbox。我认为
react-native
* 试图 * 成为非常纯粹的JavaScript
(但失败了,JavaScript
作为一种语言是纯粹的,* 实现 * 从来不是,总是关于妥协)。我个人对跨平台支持的偏好是Cordova。ct3nt3jp7#
在最新的Chrome版本中,您只需在React Native应用中启用调试模式,然后导航到
chrome://inspect/#devices
。在“设备”选项卡中,找到与应用程序对应得“WebView in .....”项,然后单击“检查”以查看调试器.